HttpClient的主要功能
-
实现了所有 HTTP 的方法(GET,POST,PUT,HEAD 等)
-
支持自动转向
-
支持 HTTPS 协议
-
支持代理服务器等
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对象,该对象包装了服务器的响应内容。程序可通过该对象获取服务器的响应内容 - 释放连接。无论执行方法是否成功,都必须释放连接
[当前使用步骤转载地址](www.jianshu.com/p/97795bade…)
maven 引入依赖
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.13</version>
</dependency>
封装httpGet请求
/**
* GET 请求
* 根据自己的需要 定义形参列表 返回值类型
*/
public static void doGet(){
//创建HttpClient 客户端
CloseableHttpClient httpClient = HttpClients.createDefault();
//创建 httpGet请求 参数:请求的http地址
HttpGet httpGet = new HttpGet("");
//设置长连接 当前设置长连接的作用是 请求完服务器以后 连接通道保持不关闭 但是这段代码最后关闭了连接 所以在这里并没有什么用
httpGet.setHeader("Connection","keep-alive");
//设置请求头 模拟浏览器请求
httpGet.setHeader("User-Agent","Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36");
//httpResponse对象 用于接受http请求的结果
CloseableHttpResponse httpResponse = null;
try {
//执行http请求 并输出响应结果
httpResponse = httpClient.execute(httpGet);
HttpEntity httpEntity = httpResponse.getEntity();
System.out.println(EntityUtils.toString(httpEntity));
} catch (IOException e) {
e.printStackTrace();
}
//请求完毕以后 需要关闭连接 无论请求是否成功 都需要关闭连接
finally {
if(httpClient != null){
try {
httpClient.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (httpResponse != null){
try {
httpResponse.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
[本段代码出处](www.jianshu.com/p/97795bade…)
封装httpPost请求
/**
* POST 请求
* 形参列表和返回值类型自己封装就可以
*/
public static void doPost(){
//创建httpClient客户端
CloseableHttpClient httpClient = HttpClients.createDefault();
//创建 HttpPost请求 参数:http地址
HttpPost httpPost = new HttpPost("");
//设置请求头 请求头可以设置很多 这里主要是设置了这两个
// 设置代理(模拟浏览器版本)
httpPost.setHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36");
// 设置 Cookie
httpPost.setHeader("Cookie", "UM_distinctid=16442706a09352-0376059833914f-3c604504-1fa400-16442706a0b345; CNZZDATA1262458286=1603637673-1530123020-%7C1530123020; JSESSIONID=805587506F1594AE02DC45845A7216A4");
//HttpPost请求 要传的参数 这里先将参数封装起来
List<BasicNameValuePair> params = new ArrayList<>();
params.add(new BasicNameValuePair("userId","1"));
params.add(new BasicNameValuePair("userName","王恒润"));
params.add(new BasicNameValuePair("userEmail","1650987523@qq.com"));
//httpResponse对象 用于接受http请求的结果
CloseableHttpResponse httpResponse = null;
try {
//这一步才是 为post 请求设置参数 这是创建表单的实体对象 设置当前参数的编码格式
httpPost.setEntity(new UrlEncodedFormEntity(params,"UTF-8"));
//执行http请求
httpResponse = httpClient.execute(httpPost);
//获取返回数据
HttpEntity httpEntity = httpResponse.getEntity();
}catch (UnsupportedEncodingException e){
e.printStackTrace();
}catch (ClientProtocolException e){
e.printStackTrace();
}catch (IOException e){
e.printStackTrace();
}
//关闭连接 不管请求成功与否
finally {
if(httpClient != null){
try {
httpClient.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if(httpResponse != null){
try {
httpResponse.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
[本段代码出处](www.jianshu.com/p/97795bade…)