httpClient的get或post請求方式步驟:
- 生成一個HttpClient對象並設置相應的參數;
- 生成一個GetMethod對象或PostMethod並設置響應的參數;
- 用HttpClient生成的對象來執行GetMethod生成的Get方法;
- 處理響應狀態碼;
- 若響應正常,處理HTTP響應內容;
- 釋放連接。
導入如下jar包:
<!--HttpClient--> <dependency> <groupId>commons-httpclient</groupId> <artifactId>commons-httpclient</artifactId> <version>3.1</version> </dependency>
代碼如下:
import com.alibaba.fastjson.JSONObject; import org.apache.commons.httpclient.*; import org.apache.commons.httpclient.methods.GetMethod; import org.apache.commons.httpclient.methods.PostMethod; import org.apache.commons.httpclient.params.HttpMethodParams; import java.io.IOException; import java.io.InputStream; /** * @Author: Yang JianQiu * @Date: 2019/4/28 11:07 * * HttpClient模擬get、post請求並發送請求參數(json等) * 【參考資料】 * https://javasam.iteye.com/blog/2117845 * https://blog.csdn.net/qq_28379809/article/details/82898792 */ public class HttpClientToInterface { /** * httpClient的get請求方式 * 使用GetMethod來訪問一個URL對應的網頁實現步驟: * 1.生成一個HttpClient對象並設置相應的參數; * 2.生成一個GetMethod對象並設置響應的參數; * 3.用HttpClient生成的對象來執行GetMethod生成的Get方法; * 4.處理響應狀態碼; * 5.若響應正常,處理HTTP響應內容; * 6.釋放連接。 * @param url * @param charset * @return */ public static String doGet(String url, String charset){ /** * 1.生成HttpClient對象並設置參數 */ HttpClient httpClient = new HttpClient(); //設置Http連接超時為5秒 httpClient.getHttpConnectionManager().getParams().setConnectionTimeout(5000); /** * 2.生成GetMethod對象並設置參數 */ GetMethod getMethod = new GetMethod(url); //設置get請求超時為5秒 getMethod.getParams().setParameter(HttpMethodParams.SO_TIMEOUT, 5000); //設置請求重試處理,用的是默認的重試處理:請求三次 getMethod.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, new DefaultHttpMethodRetryHandler()); String response = ""; /** * 3.執行HTTP GET 請求 */ try { int statusCode = httpClient.executeMethod(getMethod); /** * 4.判斷訪問的狀態碼 */ if (statusCode != HttpStatus.SC_OK){ System.err.println("請求出錯:" + getMethod.getStatusLine()); } /** * 5.處理HTTP響應內容 */ //HTTP響應頭部信息,這里簡單打印 Header[] headers = getMethod.getResponseHeaders(); for (Header h: headers){ System.out.println(h.getName() + "---------------" + h.getValue()); } //讀取HTTP響應內容,這里簡單打印網頁內容 //讀取為字節數組 byte[] responseBody = getMethod.getResponseBody(); response = new String(responseBody, charset); System.out.println("-----------response:" + response); //讀取為InputStream,在網頁內容數據量大時候推薦使用 //InputStream response = getMethod.getResponseBodyAsStream(); } catch (HttpException e) { //發生致命的異常,可能是協議不對或者返回的內容有問題 System.out.println("請檢查輸入的URL!"); e.printStackTrace(); } catch (IOException e){ //發生網絡異常 System.out.println("發生網絡異常!"); }finally { /** * 6.釋放連接 */ getMethod.releaseConnection(); } return response; } /** * post請求 * @param url * @param json * @return */ public static String doPost(String url, JSONObject json){ HttpClient httpClient = new HttpClient(); PostMethod postMethod = new PostMethod(url); postMethod.addRequestHeader("accept", "*/*"); postMethod.addRequestHeader("connection", "Keep-Alive"); //設置json格式傳送 postMethod.addRequestHeader("Content-Type", "application/json;charset=utf-8"); //必須設置下面這個Header postMethod.addRequestHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.81 Safari/537.36"); //添加請求參數 postMethod.addParameter("commentId", json.getString("commentId")); String res = ""; try { int code = httpClient.executeMethod(postMethod); if (code == 200){ res = postMethod.getResponseBodyAsString(); System.out.println(res); } } catch (IOException e) { e.printStackTrace(); } return res; } public static void main(String[] args) { doGet("http://tcc.taobao.com/cc/json/mobile_tel_segment.htm?tel=13026194071", "UTF-8"); System.out.println("-----------分割線------------"); System.out.println("-----------分割線------------"); System.out.println("-----------分割線------------"); JSONObject jsonObject = new JSONObject(); jsonObject.put("commentId", "13026194071"); doPost("http://tcc.taobao.com/cc/json/mobile_tel_segment.htm?tel=13026194071", jsonObject); } }