HttpClient_01 简介
什么是HttpClient
HttpClient 是 Apache Jakarta Common 下的子项目,是一个用来跨项目访问的中间件 ,用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议。HttpClient 已经应用在很多的项目中,比如 Apache Jakarta 上很著名的另外两个开源项目 Cactus 和 HTMLUnit 都使用了 HttpClient。
HttpClient 相比传统 JDK 自带的 URLConnection(URLConnection是一个抽象类,表示指向URL指定资源的活动连接。),增加了易用性和灵活性,它不仅使客户端发送 HTTP 请求变得容易,而且也方便了开发人员测试接口(基于 HTTP 协议的),即提高了开发的效率,也方便提高代码的实用性。
Apache HttpClient 特性
- 基于标准、纯净的 Java 语言。实现了 HTTP 1.0 和 HTTP 1.1
- 以可扩展的面向对象的结构实现了 HTTP 全部的方法
- 支持 HTTPS 协议。
- 通过 HTTP 代理建立透明的连接。
- 利用 CONNECT 方法通过 HTTP 代理建立隧道的 HTTPS 连接。
- 插件式的自定义认证方案。
- 连接管理器支持多线程应用。(支持设置最大连接数,同时支持设置每个主机的最大连接数,发现并关闭过期的连接。)
- 自动处理 Set-Cookie 中的 Cookie。
- 插件式的自定义 Cookie 策略。
- Response 的输入流可以有效的从 Socket 服务器直接读取相应内容
- Request 的输出流可以避免流中内容直接缓冲到 Socket 服务器。
- 直接获取服务器发送的 response code 和 headers。
- 设置连接超时的能力。
Apache HttpClient 使用流程
- 创建 HttpClient 对象。
- 创建请求方法的实例,并指定请求 URL。如果需要发送 GET 请求,创 建 HttpGet 对象;如果需要发送 POST 请求,创建 HttpPost 对象。
- 如果需要发送请求参数,可调用 HttpGet、HttpPost 共同的 setParams(HttpParams params) 方法来添加请求参数;对于 HttpPost 对象而言,也可调用 setEntity(HttpEntity entity) 方法来设置请求参数。
- 调用 HttpClient 对象的 execute(HttpUriRequest request) 发送请求,该方法返回一个 HttpResponse。
- 调用 HttpResponse 的 getAllHeaders()、getHeaders(String name) 等方法可获取服务器的响应头;调用 HttpResponse 的 getEntity() 方法可获取 HttpEntity 对象,该对象包装了服务器的响应内容。程序可通过该对象获取服务器的响应内容。
- 释放连接。无论执行方法是否成功,都必须释放连接。
Apache HttpClient常用方法
-
EntityUtils()
在httpclient 请求的时候,使用EntityUtils 对返回的结果进行字符串的转换 -
NameValuePair()
一个集合来存放待提交的参数 并将这个参数集合传入到一个UrlEncodedFormEntity中,然后调用HttpPost的setEntity()方法将构建好的UrlEncodedFormEntity传入 -
getStatusLine().getStatusCode()
获取响应的状态 状态码 -
getEntity()
获取数据 包装了服务器的响应内容 -
setParams(HttpParams params)
添加请求参数 -
setEntity(HttpEntity entity)
设置请求参数 -
execute(HttpUriRequest request)
执行请求
HTTP 请求的 GET 与 POST 方式的区别
- get是从服务器上获取数据,post是向服务器传送数据。
- get是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到。post是通过HTTP post机制,将表单内各个字段与其内容放置在HTML HEADER内一起传送到ACTION属性所指的URL地址。用户看不到这个过程。
- 对于get方式,服务器端用Request.QueryString获取变量的值,对于post方式,服务器端用Request.Form获取提交的数据。
- get传送的数据量较小,不能大于2KB。post传送的数据量较大,一般被默认为不受限制。但理论上,IIS4中最大量为80KB,IIS5中为100KB。
- get安全性非常低,post安全性较高。但是执行效率却比Post方法好。