Apache HttpClient 4系列已經發布好久了,但因爲它與HttpClient 3.x版本徹底不兼容,以致於業內採用此庫的公司較少,在互聯網上也少有相關的文檔資料分享。java
本文旨在寫一個簡要的Apache HttpClient 4.3開發指南,幫助開發者快速上手Apache HttpClient 4.3.x庫。app
要注意的是,本文檔中的代碼在低於HttpClient 4.3版本的地方可能不能運行。ui
一、建立HTTP客戶端url
CloseableHttpClient client = HttpClientBuilder.create().build();
二、發送基本的GET請求spa
instance.execute(new HttpGet(「http://www.baidu.com」));
三、獲取HTTP響應的狀態碼code
String url = 「http://www.baidu.com」; CloseableHttpResponse response = instance.execute(new HttpGet(url)); assertThat(response.getStatusLine().getStatusCode(), equalTo(200));
四、獲取響應的媒體類型orm
String url = 「http://www.baidu.com」; CloseableHttpResponse response = instance.execute(new HttpGet(url)); String contentMimeType = ContentType.getOrDefault(response.getEntity()).getMimeType(); assertThat(contentMimeType, equalTo(ContentType.TEXT_HTML.getMimeType()));
五、獲取響應的BODY部分xml
String url = 「http://www.baidu.com」; CloseableHttpResponse response = instance.execute(new HttpGet(url)); String bodyAsString = EntityUtils.toString(response.getEntity()); assertThat(bodyAsString, notNullValue());
六、配置請求的超時設置對象
@Test(expected=SocketTimeoutException.class) public void givenLowTimeout_whenExecutingRequestWithTimeout_thenException() throws ClientProtocolException, IOException{ RequestConfig requestConfig = RequestConfig.custom() .setConnectionRequestTimeout(50).setConnectTimeout(50) .setSocketTimeout(50).build(); HttpGet request = new HttpGet(SAMPLE_URL); request.setConfig(requestConfig); instance.execute(request); }
七、發送POST請求utf-8
instance.execute(new HttpPost(SAMPLE_URL));
八、爲HTTP請求配置重定向
CloseableHttpClient instance = HttpClientBuilder.create().disableRedirectHandling().build(); CloseableHttpResponse response = instance.execute(new HttpGet(SAMPLE_URL)); assertThat(reponse.getStatusLine().getStatusCode(), equalTo(301));
九、配置請求的HEADER部分
HttpGet request = new HttpGet(SAMPLE_URL); request.addHeader(HttpHeaders.ACCEPT, 「application/xml」); response = instance.execute(request);
十、獲取響應的HEADER部分
CloseableHttpResponse response = instance.execute(new HttpGet(SAMPLE_URL)); Header[] headers = response.getHeaders(HttpHeaders.CONTENT_TYPE); assertThat(headers, not(emptyArray()));
十一、關閉或釋放資源
response = instance.execute(new HttpGet(SAMPLE_URL)); try{ HttpEntity entity = response.getEntity(); if(entity!=null){ InputStream instream = entity.getContent(); instream.close(); } } finally{ response.close(); }
12.給請求添加參數
List<NameValuePair> params = new ArrayList<NameValuePair>(); params.add(new BasicNameValuePair("param1", "12348")); params.add(new BasicNameValuePair("param2", "1")); //request 是GET或POSTMethod對象 request.setEntity(new UrlEncodedFormEntity(params,"utf-8"));