HttpClient 4 简明教程
如果你已经写好了一个 Restful API,你要怎么测试你的 API 是否正确呢? 你又要怎么发起到 Restful API 的连接呢?
如果你的项目需要使用第三方 API 服务,比如支付宝的支付功能,比如微信支付功能,作为 Java 开发者的你,要怎么连接到它们提供的 API 呢 ?
你要怎么在你的项目中发起一个 POST 请求,把一些数据推送到远程服务上呢?
你要怎么把一个文件上传到远程的服务器上呢?
当你把这些问题一个一个抛向百度的时候,看到的全都是千篇一律的 Apache HttpClient。
虽然,即使也有不少其它的推荐,比如说比如可以使用 java.net 这个 JDK 自带的包,比如说可以使用 AsyncTaskLoader,HttpURLConnection、AsyncTask。但,它们都不是最佳的选择。
如果你从事 Android 开发,那可选择的就更多了。
面对这些选项,你会做如何选择呢?
其实没得选择,因为看来看去 HttpClient 是不二之选。
忘了那么多的优缺点比较吧,你要的,只不过是一个能够发起 HTTP GET 请求,一个能够发起 HTTP POST 请求,一个能够能够上传 HTTP 文件的 Java HTTP 客户端库。这个库,HttpClient 是唯一的工程选择,没有其它。
说了那么多,那 HttpsClient 是何方神圣呢 ?
Apache HttpClient
HttpClient 是 Apache Jakarta Common 下的子项目,是一个可以提供高效的、最新的、功能丰富的支持 HTTP / HTTPS 协议的 Java 客户端编程工具包,支持最新的 HTTP / HTTPS 协议。
HttpClient 是基于 HttpCore 的 HTTP /1.1 兼容 HTTP 代理实现,为客户端身份验证,HTTP 状态管理和 HTTP 连接管理提供可重用的组件。
Apache HttpClient 的官方网址是 http://hc.apache.org/,当前的最新版本是 HttpClient 4.5.6 (GA)。 这个最新版本目前兼容到 Java 9
HttpClient 是什么?
- HttpClient 基于 HttpCore 的客户端 HTTP 传输库
- 基于传统( 阻塞 )I/O 。
- 基于内容不可知原则。
- HttpClient 不是浏览器。它是客户端 HTTP 传输库
- HttpClient 的目的是传输和接收HTTP消息
HttpClient 又不是什么?
- HttpClient 不会尝试处理内容,而是简单的把接收到的内容直接返回
- HttpClient 并不会执行嵌入在 HTML 页面中的 javascript。
- HttpClient 甚至不会试图去猜测内容类型。
- 如果没有显式进行配置,HttpClient 甚至不会新格式化请求,或重写位置 URI,或做一些其他与 HTTP 传输无关的功能。
HttpClient 主要功能介绍
从刚刚的 HttpClient 做什么不做什么小节,我们知道 HttpClient 只做一件事,就是 HTTP 传输,简单来说,就是发起一个到指定服务器的请求,并返回服务器返回的响应。
这其实就是一个简单的 HTTP 请求响应,就是一个 HTTP 传输。
所以,从某些方面说,HttpClient 的功能都围绕 HTTP 传输展开:
- 实现了所有 HTTP 的方法( GET、POST、PUT、HEAD 等 )
- 支持 HTTP 301 和 HTTP 302 自动跳转
- 支持 HTTPS 协议
- 支持代理服务器
- 支持文件上传
- 支持多线程下载和断点续传
这么多功能,其实都是围绕 HTTP 展开。
说的再多也没用,反正,只要你想使用 Java 发起和接收一个 HTTP 请求响应,请立刻想到 HttpClient 就对了。