HttpClient 是 ApacheJakarta Common 下的子项目,可以用来提供高效的、最新的、功能丰富的支持 HTTP 协 议的客户端编程工具包(jar包),并且它支持 HTTP 协议最新的版本和建议。
HttpClient主要的功能:
1.实现了所有http方法(get,post,put,delete)等等....
2. 支持自动转向
3.支持代理服务器等
4.支持https协议等
但是,HttpClient并没有眼中的那么好,HttpClient的维护人员并不积极,因为api数量过多,很难在不破坏兼容的情况 下更新迭代,HttpClient的备胎已经出现了,(HttpURLConnect)
谷歌人员给出的原因如下
1.上面我们讲了,因为兼容性性问题
2.HttpURLConnect的api包很小,更适合安卓
3.HttpURLConnect更省流量,
不过我们不能因为过时了就不学习了,既然来了就看完再走把....
我在网上找了案例,和一些资料,为了能够更好的学习........
HttpClient提供了URLBuilder类来简化url的创建 | 修改的过程.......
我们还是来写把,感觉这样的话印象会深刻一点,
1.创建一个maven工程
2.导入依赖
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.3.5</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.6.6</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-io</artifactId>
<version>1.3.2</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
使用builder创建uri代码如下
控制台会输出如下:
系统接收到http请请求的时候,就会进行解析,然后进行响应,然后这个响应就是HTTP response.HTTP,响应的第一行是协议版本,
然后是状态码以及文本,
输出结果如下
消息头
一个Http请求包含一系列消息头,用来对消息进行描述,比如消息长度,消息类型等,HttpClient提供了获取请求,添加,移除,
枚举消息头等....
推荐的获取指定消息的请求头的方式是使用HeaderIterator
控制台会打印 :
确保底层资源被释放
这里需要说明一下,关闭http内容流跟http响应流的区别在于.前者通过消耗http内容流来保持连接,后者会立即关闭,丢弃
http连接.
当然也有这种情况,这是需要注意的.我们只需要获取响应头的一小部分东西,但是我们需要获取整个内容,并实现链接的重复性代价太大,
我们可以通过关闭响应的方式来关闭内容的输入输出流.
以上代码后,连接变得不可用,所有的资源都被释放.................
HttpClient推荐我们使用,HttpEntity的getContent方法来获取内容,或使用HttpEntity的writeTo方法来消耗掉实体内容,
HtttpClient也提供了EntityUtils类来读取,这个类提供了静态方法可以更容易的读取http内容,当时并不推荐使用,除非网站是可,
信任的,并且内容长度不大,官方给了以下例子........
有些情况下,我们需要持久化数据,为了重复使用,这时我们应该把HttpEntity转换成BufferedHttpClient();
HTML表单
HttpClient会对我们的编码格式进行编码,编码内容如下
username=zs&password=123
内容分块