packageorg.chu.ego.base.utils;importjava.io.IOException;importjava.util.ArrayList;importjava.util.List;importjava.util.Map;importorg.apache.http.HttpEntity;importorg.apache.http.NameValuePair;importorg.apache.http.client.entity.UrlEncodedFormEntity;importorg.apache.http.client.methods.CloseableHttpResponse;importorg.apache.http.client.methods.HttpGet;importorg.apache.http.client.methods.HttpPost;importorg.apache.http.client.utils.URIBuilder;importorg.apache.http.impl.client.CloseableHttpClient;importorg.apache.http.impl.client.HttpClientBuilder;importorg.apache.http.impl.client.HttpClients;importorg.apache.http.impl.client.LaxRedirectStrategy;importorg.apache.http.message.BasicNameValuePair;importorg.apache.http.util.EntityUtils;/*** --发送get请求的api
* CloseableHttpClient类 ,client实现类
* HttpClients类 ,client工具类,用于创建客户端对象。
* CloseableHttpResponse接口,请求的响应对象
* URIBuilder类 :url构建类,用于设置get请求的路径变量
* HttpGet类 :get请求的发送对象
* EntityUtils类 实体处理类
*
* --发送post 请求使用的api
* CloseableHttpClient类
* HttpClientBuilder client构建对象,用于创建客户端对象。
* LaxRedirectStrategy类,post请求重定向的策略
* CloseableHttpResponse 请求的响应对象
* HttpPost post请求的发送对象
* NameValuePair 类,用于设置参数值
* UrlEncodedFormEntity:用于设置表单参数给发送对象HttpPost
*
*@authorranger
**/
public classHttpClientUtils {public static String doGet(String url,Mapparams){//获取httpclient客户端
CloseableHttpClient httpclient =HttpClients.createDefault();
String resultString= "";
CloseableHttpResponse response= null;try{
URIBuilder builder= newURIBuilder(url);if(null!=params){for(String key:params.keySet()) {
builder.setParameter(key, params.get(key));
}
}
HttpGet get= newHttpGet(builder.build());
response=httpclient.execute(get);
System.out.println(response.getStatusLine());if(200==response.getStatusLine().getStatusCode()){
HttpEntity entity=response.getEntity();
resultString= EntityUtils.toString(entity, "utf-8");
}
}catch(Exception e) {
e.printStackTrace();
}finally{if(null!=response){try{
response.close();
}catch(IOException e) {//TODO Auto-generated catch block
e.printStackTrace();
}
}if(null!=httpclient){try{
httpclient.close();
}catch(IOException e) {//TODO Auto-generated catch block
e.printStackTrace();
}
}
}returnresultString;
}public staticString doGet(String url){return doGet(url, null);
}public static String doPost(String url,Mapparams){/*** 在4.0及以上httpclient版本中,post需要指定重定向的策略,如果不指定则按默认的重定向策略。
*
* 获取httpclient客户端*/CloseableHttpClient httpclient= HttpClientBuilder.create().setRedirectStrategy( newLaxRedirectStrategy()).build();
String resultString= "";
CloseableHttpResponse response= null;try{
HttpPost post= newHttpPost(url);
List paramaters = new ArrayList<>();if(null!=params){for(String key : params.keySet()) {
paramaters.add(newBasicNameValuePair(key,params.get(key)));
}
UrlEncodedFormEntity formEntity= newUrlEncodedFormEntity (paramaters);
post.setEntity(formEntity);
}/*** HTTP/1.1 403 Forbidden
* 原因:
* 有些网站,设置了反爬虫机制
* 解决的办法:
* 设置请求头,伪装浏览器*/post.addHeader("user-agent", "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36");
response=httpclient.execute(post);
System.out.println(response.getStatusLine());if(200==response.getStatusLine().getStatusCode()){
HttpEntity entity=response.getEntity();
resultString= EntityUtils.toString(entity, "utf-8");
}
}catch(Exception e) {
e.printStackTrace();
}finally{if(null!=response){try{
response.close();
}catch(IOException e) {//TODO Auto-generated catch block
e.printStackTrace();
}
}if(null!=httpclient){try{
httpclient.close();
}catch(IOException e) {//TODO Auto-generated catch block
e.printStackTrace();
}
}
}returnresultString;
}public staticString doPost(String url){return doPost(url, null);
}
}