HttpClient请求工具类

Posted yangche

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HttpClient请求工具类相关的知识,希望对你有一定的参考价值。

  1 package com.yangche.utils;
  2 
  3 import org.apache.http.NameValuePair;
  4 import org.apache.http.client.ClientProtocolException;
  5 import org.apache.http.client.entity.UrlEncodedFormEntity;
  6 import org.apache.http.client.methods.*;
  7 import org.apache.http.client.utils.URIBuilder;
  8 import org.apache.http.entity.ContentType;
  9 import org.apache.http.entity.StringEntity;
 10 import org.apache.http.impl.client.CloseableHttpClient;
 11 import org.apache.http.impl.client.HttpClients;
 12 import org.apache.http.message.BasicNameValuePair;
 13 import org.apache.http.util.EntityUtils;
 14 import org.springframework.util.StringUtils;
 15 
 16 import java.io.IOException;
 17 import java.io.UnsupportedEncodingException;
 18 import java.net.URI;
 19 import java.net.URISyntaxException;
 20 import java.util.ArrayList;
 21 import java.util.List;
 22 import java.util.Map;
 23 
 24 public class HttpClientUtil {
 25     public static String doGet(String url, Map<String,Object> param){
 26         //创建httpclient对象
 27         CloseableHttpClient httpClient = HttpClients.createDefault();
 28         String resultString="";
 29         CloseableHttpResponse response=null;
 30         try {
 31             URIBuilder builder=new URIBuilder(url);
 32             if(param!=null){
 33                 for (String key:param.keySet()){
 34                     if(param.get(key) instanceof List){
 35                         List list=(List)param.get(key);
 36                         for (Object liString:list){
 37                             builder.addParameter(key,String.valueOf(liString));
 38                         }
 39                     }else {
 40                         builder.addParameter(key,String.valueOf(param.get(key)));
 41                     }
 42                 }
 43             }
 44             URI uri=builder.build();
 45             //创建httpGet请求
 46             HttpGet httpGet=new HttpGet(uri);
 47             //执行请求
 48             response=httpClient.execute(httpGet);
 49             resultString= EntityUtils.toString(response.getEntity(),"UTF-8");
 50         } catch (URISyntaxException e) {
 51             e.printStackTrace();
 52         } catch (ClientProtocolException e) {
 53             e.printStackTrace();
 54         } catch (IOException e) {
 55             e.printStackTrace();
 56         }finally {
 57             try {
 58                 if(response!=null){
 59                     response.close();
 60                 }
 61                 httpClient.close();
 62             } catch (IOException e) {
 63                 e.printStackTrace();
 64             }
 65         }
 66         return resultString;
 67     }
 68     public static String doGet(String url){
 69         return doGet(url,null);
 70     }
 71     public static String doPost(String url,Map<String,String> param){
 72         //创建httpclient对象
 73         CloseableHttpClient httpClient = HttpClients.createDefault();
 74         CloseableHttpResponse response=null;
 75         String resultString="";
 76         //创建httpPost请求
 77         HttpPost httpPost = new HttpPost(url);
 78         //创建参数列表
 79         if(param!=null){
 80             List<NameValuePair> paramList=new ArrayList<>();
 81             for (String key:param.keySet()){
 82                 paramList.add(new BasicNameValuePair(key,param.get(key)));
 83             }
 84             try {
 85                 //模拟表单
 86                 UrlEncodedFormEntity entity=new UrlEncodedFormEntity(paramList);
 87                 httpPost.setEntity(entity);
 88                 //执行http请求
 89                 response=httpClient.execute(httpPost);
 90                 resultString=EntityUtils.toString(response.getEntity(),"UTF-8");
 91             } catch (UnsupportedEncodingException e) {
 92                 e.printStackTrace();
 93             } catch (ClientProtocolException e) {
 94                 e.printStackTrace();
 95             } catch (IOException e) {
 96                 e.printStackTrace();
 97             }finally {
 98                 try {
 99                     response.close();
100                 } catch (IOException e) {
101                     e.printStackTrace();
102                 }
103             }
104         }
105         return resultString;
106     }
107     public static String doPost(String url){
108         return doPost(url,null);
109     }
110 
111     /**
112      * restful请求
113      * @param url
114      * @param requestType 请求类型:post、delete、patch
115      * @param json
116      * @return
117      */
118     public static String doRequest(String url,String requestType,String json){
119         //创建HttpClient对象
120         CloseableHttpClient httpClient=HttpClients.createDefault();
121         CloseableHttpResponse response=null;
122         String resultString="";
123         try {
124             //创建不同类型的请求
125             HttpPost httpPost=new HttpPost(url);
126             HttpDeleteWithBody httpDelete =new HttpDeleteWithBody(url);
127             HttpPatch httpPatch=new HttpPatch(url);
128             //创建请求内容
129             StringEntity entity=new StringEntity(json, ContentType.APPLICATION_JSON);
130             //执行http请求
131             if(!StringUtils.isEmpty(requestType)&&requestType.equalsIgnoreCase("post")){
132                 httpPost.setEntity(entity);
133                 response=httpClient.execute(httpPost);
134             }else if(!StringUtils.isEmpty(requestType)&&requestType.equalsIgnoreCase("delete")){
135                 httpDelete.setEntity(entity);
136                 response=httpClient.execute(httpDelete);
137             }else if(!StringUtils.isEmpty(requestType)&&requestType.equalsIgnoreCase("patch")){
138                 httpPatch.setEntity(entity);
139                 response=httpClient.execute(httpPatch);
140             }
141             resultString=EntityUtils.toString(response.getEntity(),"UTF-8");
142         } catch (IOException e) {
143             e.printStackTrace();
144         } finally {
145             try {
146                 response.close();
147             } catch (IOException e) {
148                 e.printStackTrace();
149             }
150         }
151     }
152 
153     private static class HttpDeleteWithBody extends HttpEntityEnclosingRequestBase {
154         public static final String METHOD_NAME="DELETE";
155         @Override
156         public String getMethod() {
157             return METHOD_NAME;
158         }
159         public HttpDeleteWithBody (final String uri){
160             super();
161             setURI(URI.create(uri));
162         }
163         public HttpDeleteWithBody (final URI uri){
164             super();
165             setURI(uri);
166         }
167         public HttpDeleteWithBody(){
168             super();
169         }
170     }
171 }

 以上所需的maven依赖如下:

 1 <!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpcore -->
 2 <dependency>
 3     <groupId>org.apache.httpcomponents</groupId>
 4     <artifactId>httpcore</artifactId>
 5     <version>4.4.10</version>
 6 </dependency>
 7 
 8 <!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpclient -->
 9 <dependency>
10     <groupId>org.apache.httpcomponents</groupId>
11     <artifactId>httpclient</artifactId>
12     <version>4.5.6</version>
13 </dependency>

 

以上是关于HttpClient请求工具类的主要内容,如果未能解决你的问题,请参考以下文章

HttpClient请求工具类

httpclient工具类,post请求发送json字符串参数,中文乱码处理

https工具类设置请求头,使用apache的httpclient实现

HttpClient 的GET(带参数)POST请求方式,工具类方法

httpclient4.3 工具类

轻松把玩HttpClient之封装HttpClient工具类,封装输入参数,简化工具类