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工具类,post请求发送json字符串参数,中文乱码处理
https工具类设置请求头,使用apache的httpclient实现