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 url114 * @param requestType 请求类型:post、delete、patch115 * @param json116 * @return117 */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 @Override156 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>