《Apache HttpClient 4.3开发指南》

Apache HttpClient 4系列已经发布很久了,但由于它与HttpClient 3.x版本完全不兼容,以至于业内采用此库的公司较少,在互联网上也少有相关的文档资料分享。

本文旨在写一个简要的Apache HttpClient 4.3开发指南,帮助开发者快速上手Apache HttpClient 4.3.x库。

要注意的是,本文档中的代码在低于HttpClient 4.3版本的地方可能不能运行。

二、开发手册

1、创建HTTP客户端

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

2、发送基本的GET请求

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

3、获取HTTP响应的状态码

  1. String url = “http://www.baidu.com”;
  2. CloseableHttpResponse response = instance.execute(new HttpGet(url));
  3. assertThat(response.getStatusLine().getStatusCode(), equalTo(200));

4、获取响应的媒体类型

  1. String url = “http://www.baidu.com”;
  2. CloseableHttpResponse response = instance.execute(new HttpGet(url));
  3. String contentMimeType = ContentType.getOrDefault(response.getEntity()).getMimeType();
  4. assertThat(contentMimeType, equalTo(ContentType.TEXT_HTML.getMimeType()));

5、获取响应的BODY部分

  1. String url = “http://www.baidu.com”;
  2. CloseableHttpResponse response = instance.execute(new HttpGet(url));
  3. String bodyAsString = EntityUtils.toString(response.getEntity());
  4. assertThat(bodyAsString, notNullValue());

6、配置请求的超时设置

  1. @Test(expected=SocketTimeoutException.class)
  2. public void givenLowTimeout_whenExecutingRequestWithTimeout_thenException() throws ClientProtocolException, IOException{
  3. RequestConfig requestConfig = RequestConfig.custom()
  4. .setConnectionRequestTimeout(50).setConnectTimeout(50)
  5. .setSocketTimeout(50).build();
  6. HttpGet request = new HttpGet(SAMPLE_URL);
  7. request.setConfig(requestConfig);
  8. instance.execute(request);
  9. }

7、发送POST请求

  1. instance.execute(new HttpPost(SAMPLE_URL));

8、为HTTP请求配置重定向

  1. CloseableHttpClient instance = HttpClientBuilder.create().disableRedirectHandling().build();
  2. CloseableHttpResponse response = instance.execute(new HttpGet(SAMPLE_URL));
  3. assertThat(reponse.getStatusLine().getStatusCode(), equalTo(301));

9、配置请求的HEADER部分

  1. HttpGet request = new HttpGet(SAMPLE_URL);
  2. request.addHeader(HttpHeaders.ACCEPT, “application/xml”);
  3. response = instance.execute(request);

10、获取响应的HEADER部分

  1. CloseableHttpResponse response = instance.execute(new HttpGet(SAMPLE_URL));
  2. Header[] headers = response.getHeaders(HttpHeaders.CONTENT_TYPE);
  3. assertThat(headers, not(emptyArray()));

11、关闭或释放资源

  1. response = instance.execute(new HttpGet(SAMPLE_URL));
  2. try{
  3. HttpEntity entity = response.getEntity();
  4. if(entity!=null){
  5. InputStream instream = entity.getContent();
  6. instream.close();
  7. }
  8. } finally{
  9. response.close();
  10. }

以上内容涵盖了HttpClient 4.3所有常见的需求,供开发者参考。

HttpClient基本用法的更多相关文章

  1. yii2 httpClient的用法

    yii2 httpClient的用法示例: <?php /* * @Purpose : yii2 httpClient 请求示例 * @Author : Chrdai * @Time : 201 ...

  2. HttpClient的用法

    客户端模拟http请求工具 Postmen(谷歌插件).RestClient 服务器模拟http请求工具 httpclient.HttpURLConnection httpCient请求代码 /** ...

  3. HttpClient的用法总结

    使用HttpClient连接服务端的步骤: 1.创建HttpClient客户端对象 HttpClient client = new DefaultHttpClient(); 2.创建请求对象      ...

  4. HttpClient基础用法

    一.HttpClient HttpClient是Apache HttpComponents 下的子项目,用来提供高效的.最新的.功能丰富的支持HTTP协议的客户端编程工具包(httpclient-4. ...

  5. Java测试开发--HttpClient常规用法(九)

    1.HttpClient可以读取网页(HTTP/HTTPS)内容 2.对url发送get/post请求(带不带参数都可以),进行测试 一.maven项目pom.xml需要引入包 <depende ...

  6. Android Volley完全解析(一),初识Volley的基本用法

    1. Volley简介 我们平时在开发Android应用的时候不可避免地都需要用到网络技术,而多数情况下应用程序都会使用HTTP协议来发送和接收网络数据.Android 系统中主要提供了两种方式来进行 ...

  7. HttpClient session

    session概述 session机制 session机制是一种服务器端的机制,服务器使用一种类似于散列表的结构(也可能就是使用散列表)来保存信息. 当程序需要为某个客户端的请求创建一个session ...

  8. [转] Android Volley完全解析(一),初识Volley的基本用法

    版权声明:本文出自郭霖的博客,转载必须注明出处.   目录(?)[-] Volley简介 下载Volley StringRequest的用法 JsonRequest的用法   转载请注明出处:http ...

  9. Android Volley入门到精通:初识Volley的基本用法

    1. Volley简介 我们平时在开发Android应用的时候不可避免地都需要用到网络技术,而多数情况下应用程序都会使用HTTP协议来发送和接收网络数据.Android系统中主要提供了两种方式来进行H ...

随机推荐

  1. java rest框架jersey数组单记录问题解决

    JAVA数据接口采用jersey技术,可以返回xml,json等格式,可以根据客户端请求accept,如:Application/json,Application/xml 来得到不同的接口数据,非常好 ...

  2. MD5值算法原理

    MD5原理说明 一.MD5算法介绍. MD5,即“Message-Digest Algorithm 5(信息-摘要算法)”,从名字来看就知道它是从MD3.MD4发展而来的一种加密算法,其主要通过采集文 ...

  3. cocos2dx中使用声音引擎需要包含的头文件

    1.需要包含的头文件和命名空间 #include "SimpleAudioEngine.h"using namespace CocosDenshion;

  4. yebis error ---depth of field

    前几天在墙外无法登陆cnblogs...导致很多blogs就没写了 有几篇比较值得记下来的,但是我已经不记得了,应该和sao有关scalable ambient obscurance 我似乎回忆起一点 ...

  5. C#单链表(数据结构)

    学习单链表的源码项目:http://files.cnblogs.com/xmfdsh/CSharp%E5%8D%95%E9%93%BE%E8%A1%A8.rar 链表是用一组任意的存储单元来存储线性表 ...

  6. JAVA数据结构系列 栈

    java数据结构系列之栈 手写栈 1.利用链表做出栈,因为栈的特殊,插入删除操作都是在栈顶进行,链表不用担心栈的长度,所以链表再合适不过了,非常好用,不过它在插入和删除元素的时候,速度比数组栈慢,因为 ...

  7. WPF 详解模板

    在WPF中有三大模板 ControlTemplate,ItemsPanelTemplate,DataTemplate.其中ControlTemplate和 ItemsPanelTemplate是控件模 ...

  8. 【补解体报告】topcoder 634 DIV 2

    A:应该是道语文题,注意边界就好: B:开始考虑的太复杂,没能够完全提取题目的思维. 但还是A了!我愚蠢的做法:二分答案加暴力枚举, 枚举的时候是完全模拟的,比如每次取得时候都是从大到小的去取,最后统 ...

  9. 【算法】E.W.Dijkstra算术表达式求值

    算术表达式求值 我们要学习的一个栈的用例同时也是展示泛型的应用的一个经典例子,就是用来计算算术表达式的值,例如 ( 1 + ( ( 2 + 3 ) * ( 4 * 5 ) ) ) 如果将4乘以5,把3 ...

  10. mysql关联修改SQL及long与datetime类型相互转换

    1.关联修改 #解决思路 UPDATE tb1,tb2 SET tb1.address=tb2.address WHERE tb1.name=tb2.name UPDATE car c,tmpcolo ...