Apache HttpClient 4.3開發指南

1、概述

Apache HttpClient 4系列已經發布好久了,但因爲它與HttpClient 3.x版本徹底不兼容,以致於業內採用此庫的公司較少,在互聯網上也少有相關的文檔資料分享。java

本文旨在寫一個簡要的Apache HttpClient 4.3開發指南,幫助開發者快速上手Apache HttpClient 4.3.x庫。app

要注意的是,本文檔中的代碼在低於HttpClient 4.3版本的地方可能不能運行。ui

2、開發手冊

一、建立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"));
相關文章
相關標籤/搜索