- 提问:什么是HttpClient?
HttpClient 是Apache Jakarta Common 下的子项目,可以用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议;
——————————
- 提问:为什么要用HttpClient?
HTTP 协议是现在 Internet 上使用得最多、最重要的协议,越来越多的 Java 应用程序需要直接通过 HTTP 协议来访问网络资源;
虽然在 JDK 的 java net包中已经提供了访问 HTTP 协议的基本功能,但是对于大部分应用程序来说,JDK 库本身提供的功能还不够丰富和灵活;
HttpClient 是 Apache Jakarta Common 下的子项目,用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议。HttpClient 已经应用在很多的项目中,比如 Apache Jakarta 上很著名的另外两个开源项目 Cactus 和 HTMLUnit 都使用了 HttpClient。现在HttpClient最新版本为 HttpClient 4.5 .6(2015-09-11)
——————————
- 提问:HttpClient能干嘛?
【模拟浏览器】发送HTTP请求,接收响应;
RPC接口调用;
爬取网页源码;(常用:HttpClient配合Jsoup可做网页爬虫)
批量事务请求;
…………
——————————
- 提问:HttpClient是浏览器吗?
很多人有这样的观点:既然HttpClient是一个HTTP客户端编程工具,那不就相当于是一个浏览器了吗?无非它不能把HTML渲染出页面而已罢了;
其实HttpClient并非浏览器,他是一个HTTP通信库、一个工具包,因此它只提供一个通用浏览器应用程序所期望的功能子集;
HttpClient与浏览器最根本的区别是:
HttpClient中没有用户界面,浏览器需要一个渲染引擎来显示页面,并解释用户输入(例如鼠标点击显示页面上的某处之后如何响应、计算如何显示HTML页面、级联样式表和图像、javascript解释器运行嵌入HTML页面或从HTML页面引用的javascript代码、来自用户界面的事件被传递到javascript解释器进行处理等等等等);
HttpClient只能以编程的方式通过其API用于传输和接受HTTP消息,它对内容也是完全不可知的;
——————————————————————————————
通用模版
——————————
doGet
输入:URL、timeout
返回:URL的数据
public static String doGet(String url,int timeout) {
CloseableHttpClient client = HttpClients.createDefault();
HttpGet get = new HttpGet(url);
HttpResponse response = null;
HttpHost proxy = new HttpHost("xx.xx.xx",0000);
RequestConfig config = RequestConfig
.custom()
.setConnectionRequestTimeout(timeout)
.setConnectTimeout(timeout)
.setSocketTimeout(timeout)
.setRedirectsEnabled(true)
.setProxy(proxy)
.build();
get.setConfig(config);
try {
response = client.execute(get);
if (response.getStatusLine().getStatusCode() == 200){
HttpEntity entity = response.getEntity();
//System.out.println(EntityUtils.toString(entity,"utf-8"));
return EntityUtils.toString(entity,"utf-8");
}
} catch (IOException e) {
e.printStackTrace();
}
if (response!=null || client!=null){
try {
((CloseableHttpResponse) response).close();
} catch (IOException e) {
e.printStackTrace();
}
try {
client.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return null;
}
——————————
doPost
输入:URL、数据、timeout
输出:数据
public static String doPost(String url,String data,int timeout) {
CloseableHttpClient cli