java模擬瀏覽器發送請求


  1 package test;
  2 
  3 import java.io.BufferedReader;
  4 import java.io.DataOutputStream;
  5 import java.io.IOException;
  6 import java.io.InputStreamReader;
  7 import java.net.HttpURLConnection;
  8 import java.net.URL;
  9 import java.net.URLEncoder;
 10 
 11 import javax.servlet.http.HttpServletRequest;
 12 
 13 import org.apache.http.HttpEntity;
 14 import org.apache.http.HttpResponse;
 15 import org.apache.http.client.ClientProtocolException;
 16 import org.apache.http.client.methods.HttpGet;
 17 import org.apache.http.client.methods.HttpPost;
 18 import org.apache.http.client.utils.HttpClientUtils;
 19 import org.apache.http.entity.StringEntity;
 20 import org.apache.http.impl.client.DefaultHttpClient;
 21 import org.apache.http.util.EntityUtils;
 22 
 23 public class TestRequestUtil {
 24 //    public static void main(String[] args) {
 25 //        doGetStr("http://dzdzwxcs1.ciitc.com.cn/s/VcbrYFtK");
 26 //    }
 27     /**
 28      * 接口調用 GET
 29      */
 30     public static void httpURLConectionGET(String urls) {
 31         try {
 32             URL url = new URL(urls); // 把字符串轉換為URL請求地址
 33             HttpURLConnection connection = (HttpURLConnection) url.openConnection();// 打開連接
 34             connection.connect();// 連接會話
 35             // 獲取輸入流
 36             BufferedReader br = new BufferedReader(new InputStreamReader(connection.getInputStream()));
 37             String line;
 38             StringBuilder sb = new StringBuilder();
 39             while ((line = br.readLine()) != null) {// 循環讀取流
 40                 sb.append(line);    //寫入對象中
 41             }
 42             br.close();// 關閉流
 43             connection.disconnect();// 斷開連接
 44             System.out.println(sb.toString());
 45         } catch (Exception e) {
 46             e.printStackTrace();
 47             System.out.println("請求失敗!");
 48         }
 49     }
 50 
 51     /**
 52      * 接口調用 POST
 53      */
 54     public static void httpURLConnectionPOST(String urls) {
 55         try {
 56             URL url = new URL(urls);
 57 
 58             // 將url 以 open方法返回的urlConnection 連接強轉為HttpURLConnection連接 (標識一個url所引用的遠程對象連接)
 59             HttpURLConnection connection = (HttpURLConnection) url.openConnection();// 此時cnnection只是為一個連接對象,待連接中
 60 
 61             // 設置連接輸出流為true,默認false (post 請求是以流的方式隱式的傳遞參數)
 62             connection.setDoOutput(true);
 63 
 64             // 設置連接輸入流為true
 65             connection.setDoInput(true);
 66 
 67             // 設置請求方式為post
 68             connection.setRequestMethod("POST");
 69 
 70             // post請求緩存設為false
 71             connection.setUseCaches(false);
 72 
 73             // 設置該HttpURLConnection實例是否自動執行重定向
 74             connection.setInstanceFollowRedirects(true);
 75 
 76             // 設置請求頭里面的各個屬性 (以下為設置內容的類型,設置為經過urlEncoded編碼過的from參數)
 77             // application/x-javascript text/xml->xml數據 application/x-javascript->json對象
 78             // application/x-www-form-urlencoded->表單數據
 79             connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
 80 
 81             // 建立連接 (請求未開始,直到connection.getInputStream()方法調用時才發起,以上各個參數設置需在此方法之前進行)
 82             connection.connect();
 83 
 84             // 創建輸入輸出流,用於往連接里面輸出攜帶的參數,(輸出內容為?后面的內容)
 85             DataOutputStream dataout = new DataOutputStream(connection.getOutputStream());
 86             String parm = "storeId=" + URLEncoder.encode("32", "utf-8"); // URLEncoder.encode()方法 為字符串進行編碼
 87 
 88             // 將參數輸出到連接
 89             dataout.writeBytes(parm);
 90 
 91             // 輸出完成后刷新並關閉流
 92             dataout.flush();
 93             dataout.close(); // 重要且易忽略步驟 (關閉流,切記!)
 94 
 95             System.out.println(connection.getResponseCode());
 96 
 97             // 連接發起請求,處理服務器響應 (從連接獲取到輸入流並包裝為bufferedReader)
 98             BufferedReader bf = new BufferedReader(new InputStreamReader(connection.getInputStream()));
 99             @SuppressWarnings("unused")
100             String line = null;
101             StringBuilder sb = new StringBuilder(); // 用來存儲響應數據
102 
103             // 循環讀取流,若不到結尾處
104             while ((line = bf.readLine()) != null) {
105                 sb.append(bf.readLine());
106             }
107             bf.close(); // 重要且易忽略步驟 (關閉流,切記!)
108             connection.disconnect(); // 銷毀連接
109             System.out.println(sb.toString());
110 
111         } catch (Exception e) {
112             e.printStackTrace();
113         }
114     }
115 
116     /**
117      * get 請求 @param @param url @return String @throws
118      */
119     public static String doGetStr(String url) {
120         DefaultHttpClient httpClient = new DefaultHttpClient();
121         HttpGet httpGet = new HttpGet(url);
122         String result = "";
123 
124         try {
125             HttpResponse response = httpClient.execute(httpGet);
126             HttpEntity entity = response.getEntity();
127             if (entity != null) {
128                 result = EntityUtils.toString(entity, "UTF-8");
129             }
130         } catch (ClientProtocolException e) {
131             e.printStackTrace();
132         } catch (IOException e) {
133             e.printStackTrace();
134         } finally {
135             HttpClientUtils.closeQuietly(httpClient);
136         }
137         return result;
138     }
139 
140     /**
141      * post 請求 @param @param url @param @param outStr @throws
142      */
143     public static String doPostStr(String url, String outStr) {
144         DefaultHttpClient httpClient = new DefaultHttpClient();
145         HttpPost httpPost = new HttpPost();
146         String result = "";
147 
148         try {
149             httpPost.setEntity(new StringEntity(outStr, "UTF-8"));
150             HttpResponse response = httpClient.execute(httpPost);
151             result = EntityUtils.toString(response.getEntity(), "UTF-8");
152         } catch (ClientProtocolException e) {
153             e.printStackTrace();
154         } catch (IOException e) {
155             e.printStackTrace();
156         } finally {
157             HttpClientUtils.closeQuietly(httpClient);
158         }
159         return result;
160     }
161 }

以上是個人根據網上總結的幾種請求方法。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM