天天看點

Apache HttpClient 4.3開發指南

《Apache HttpClient 4.3開發指南》

一、概述

Apache HttpClient 4系列已經釋出很久了,但由于它與HttpClient 3.x版本完全不相容,以至于業内采用此庫的公司較少,在網際網路上也少有相關的文檔資料分享。

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

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

二、開發手冊

1、建立HTTP用戶端

CloseableHttpClient client = HttpClientBuilder.create().build();

2、發送基本的GET請求

instance.execute(new HttpGet(“http://www.baidu.com”));

3、擷取HTTP響應的狀态碼

String url = “http://www.baidu.com”;

CloseableHttpResponse response = instance.execute(new HttpGet(url));

assertThat(response.getStatusLine().getStatusCode(), equalTo(200));

4、擷取響應的媒體類型

String contentMimeType = ContentType.getOrDefault(response.getEntity()).getMimeType();

assertThat(contentMimeType, equalTo(ContentType.TEXT_HTML.getMimeType()));

5、擷取響應的BODY部分

String bodyAsString = EntityUtils.toString(response.getEntity());

assertThat(bodyAsString, notNullValue());

6、配置請求的逾時設定

@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);

}

7、發送POST請求

instance.execute(new HttpPost(SAMPLE_URL));

8、為HTTP請求配置重定向

CloseableHttpClient instance = HttpClientBuilder.create().disableRedirectHandling().build();

CloseableHttpResponse response = instance.execute(new HttpGet(SAMPLE_URL));

assertThat(reponse.getStatusLine().getStatusCode(), equalTo(301));

9、配置請求的HEADER部分

HttpGet request = new HttpGet(SAMPLE_URL);

request.addHeader(HttpHeaders.ACCEPT, “application/xml”);

response = instance.execute(request);

10、擷取響應的HEADER部分

Header[] headers = response.getHeaders(HttpHeaders.CONTENT_TYPE);

assertThat(headers, not(emptyArray()));

11、關閉或釋放資源

response = instance.execute(new HttpGet(SAMPLE_URL));

try{

  HttpEntity entity = response.getEntity();

  if(entity!=null){

    InputStream instream = entity.getContent();

    instream.close();

  }

} finally{

  response.close();

以上内容涵蓋了HttpClient 4.3所有常見的需求,供開發者參考。