1 package com.han.http;
2
3
4 import java.io.IOException;
5 import java.io.UnsupportedEncodingException;
6 import java.nio.charset.Charset;
7 import java.util.ArrayList;
8 import java.util.HashMap;
9 import java.util.List;
10 import java.util.Map;
11
12 import org.apache.http.HttpEntity;
13 import org.apache.http.HttpResponse;
14 import org.apache.http.NameValuePair;
15 import org.apache.http.client.ClientProtocolException;
16 import org.apache.http.client.ResponseHandler;
17 import org.apache.http.client.config.CookieSpecs;
18 import org.apache.http.client.config.RequestConfig;
19 import org.apache.http.client.entity.UrlEncodedFormEntity;
20 import org.apache.http.client.methods.CloseableHttpResponse;
21 import org.apache.http.client.methods.HttpGet;
22 import org.apache.http.client.methods.HttpPost;
23 import org.apache.http.client.protocol.HttpClientContext;
24 import org.apache.http.entity.StringEntity;
25 import org.apache.http.impl.client.CloseableHttpClient;
26 import org.apache.http.impl.client.HttpClientBuilder;
27 import org.apache.http.impl.client.HttpClients;
28 import org.apache.http.message.BasicHeader;
29 import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
30 import org.apache.http.message.BasicNameValuePair;
31 import org.apache.http.util.EntityUtils;
32 import org.slf4j.Logger;
33 import org.slf4j.LoggerFactory;
34
35
36 public class HttpClientHelp {
37
38 private final static Logger logger = LoggerFactory.getLogger(HttpClientHelp.class);
39
40 private final static String ENCODE = "utf-8";
41
42 private final static Charset CHARSET = Charset.forName("utf-8");
43 public static final int TIMEOUT = 20000;
44
45 private static PoolingHttpClientConnectionManager cm = null;
46 private static RequestConfig defaultRequestConfig = null;
47
48 static {
49 /**
50 * 连接池管理
51 * **/
52 cm = new PoolingHttpClientConnectionManager(); // 将最大连接数
53 cm.setMaxTotal(50);
54 // 将每个路由基础的连接增加到20
55 cm.setDefaultMaxPerRoute(20);
56
57 /** request设置 **/
58 // 连接超时 20s
59 defaultRequestConfig = RequestConfig.custom().setCookieSpec(CookieSpecs.IGNORE_COOKIES).setRedirectsEnabled(false).setSocketTimeout(TIMEOUT)
60 .setConnectTimeout(TIMEOUT).setConnectionRequestTimeout(TIMEOUT).build();
61 }
62
63 public static CloseableHttpClient getClient() {
64 return HttpClientBuilder.create().setDefaultRequestConfig(defaultRequestConfig).setConnectionManager(cm).build();
65 }
66
67
68 public static String httpGetByUrl(String url) throws ClientProtocolException, IOException {
69 String responseBody = "";
70 CloseableHttpClient httpclient = HttpClients.createDefault();
71 try {
72 HttpGet httpget = new HttpGet(url);
73 ResponseHandler<String> responseHandler = new ResponseHandler<String>() {
74 @Override
75 public String handleResponse(final HttpResponse response) throws ClientProtocolException, IOException {
76 int status = response.getStatusLine().getStatusCode();
77 if (status >= 200 && status < 300) {
78 HttpEntity entity = response.getEntity();
79 return entity != null ? EntityUtils.toString(entity) : null;
80 } else {
81 throw new ClientProtocolException("Unexpected response status: " + status);
82 }
83 }
84 };
85 responseBody = httpclient.execute(httpget, responseHandler);
86 } finally {
87 httpclient.close();
88 }
89 return responseBody;
90 }
91
92 public static String postBodyContent(String url, String bodyContent) throws ClientProtocolException, IOException {
93 String result = "";
94 CloseableHttpClient httpclient = HttpClients.createDefault();
95 CloseableHttpResponse response = null;
96 try {
97 HttpPost httppost = new HttpPost(url);
98 StringEntity reqEntity = new StringEntity(bodyContent, "UTF-8");
99 httppost.setEntity(reqEntity);
100 // 设置连接超时5秒,请求超时1秒,返回数据超时8秒
101 RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(5000).setConnectionRequestTimeout(1000).setSocketTimeout(8000)
102 .build();
103 httppost.setConfig(requestConfig);
104 response = httpclient.execute(httppost);
105 HttpEntity responseEntity = response.getEntity();
106 byte[] bytes = EntityUtils.toByteArray(responseEntity);
107 result = new String(bytes, "UTF-8");
108 } finally {
109 if (null != response) {
110 response.close();
111 }
112 httpclient.close();
113 }
114 return result;
115 }
116
117
118
119 /**
120 * post paramMap
121 *
122 * @param path
123 * @param params
124 * @param headers
125 * @return
126 */
127 public static String post(String path, Map<String, String> params, Map<String, String> headers) {
128 List<NameValuePair> values = new ArrayList<NameValuePair>();
129 for (String s : params.keySet()) {
130 values.add(new BasicNameValuePair(s, params.get(s)));
131 }
132 UrlEncodedFormEntity entity = null;
133 try {
134 entity = new UrlEncodedFormEntity(values, ENCODE);
135 } catch (UnsupportedEncodingException e) {
136 // TODO Auto-generated catch block
137 logger.error(e.getMessage());
138 }
139 return post(path, entity, headers);
140 }
141
142 /**
143 * post body
144 *
145 * @param path
146 * @param body
147 * @param headers
148 * @return
149 */
150 public static String post(String path, String body, Map<String, String> headers) {
151 return post(path, new StringEntity(body, CHARSET), headers);
152 }
153
154 public static String post(String path, HttpEntity postEntity, Map<String, String> headers) {
155 String responseContent = null;
156 CloseableHttpClient client = getClient();
157 HttpPost httpPost = null;
158 try {
159 httpPost = new HttpPost(path);
160 if (headers != null && !headers.isEmpty()) {
161 for (String s : headers.keySet()) {
162 httpPost.addHeader(s, headers.get(s));
163 }
164 }
165 httpPost.addHeader("Content-Type", "application/json");
166 httpPost.setEntity(postEntity);
167 CloseableHttpResponse response = client.execute(httpPost, HttpClientContext.create());
168 HttpEntity entity = response.getEntity();
169 responseContent = EntityUtils.toString(entity, ENCODE);
170 } catch (Exception e) {
171 logger.error(e.getMessage());
172 e.printStackTrace();
173 } finally {
174 if (httpPost != null) {
175 httpPost.releaseConnection();
176 }
177 }
178 return responseContent;
179 }
180
181 public static String get(String path, Map<String, String> headers) {
182 String responseContent = null;
183 CloseableHttpClient client = getClient();
184 HttpGet httpGet = new HttpGet(path);
185 try {
186
187 if (headers != null && !headers.isEmpty()) {
188 for (String s : headers.keySet()) {
189 httpGet.addHeader(s, headers.get(s));
190 }
191 }
192 CloseableHttpResponse response = client.execute(httpGet, HttpClientContext.create());
193 HttpEntity entity = response.getEntity();
194 responseContent = EntityUtils.toString(entity, ENCODE);
195 } catch (Exception e) {
196 logger.error(e.getMessage());
197 e.printStackTrace();
198 } finally {
199 httpGet.releaseConnection();
200 }
201 return responseContent;
202 }
203
204
205 @SuppressWarnings("deprecation")//设置了请求头
206 public static String postByBodyStringWithHeader(String url, String bodyString) throws ClientProtocolException, IOException {
207 String result = "";
208 CloseableHttpClient httpclient = HttpClients.createDefault();
209 CloseableHttpResponse response = null;
210 try {
211 HttpPost httppost = new HttpPost(url);
212 StringEntity reqEntity = new StringEntity(bodyString, "UTF-8");
213 httppost.setEntity(reqEntity);
214
215 Map<String, String> headers = new HashMap<String, String>();
216 headers.put("Content-Type", "application/json;charset=UTF-8");
217 if (headers != null && !headers.isEmpty()) {
218 for (String s : headers.keySet()) {
219 httppost.addHeader(s, headers.get(s));
220 }
221 }
222 //设置连接超时5秒,请求超时1秒,返回数据超时8秒
223 // RequestConfig requestConfig = RequestConfig.custom()
224 // .setConnectTimeout(5000).setConnectionRequestTimeout(5000)
225 // .setSocketTimeout(8000).build();
226 // httppost.setConfig(requestConfig);
227 response = httpclient.execute(httppost);
228 HttpEntity responseEntity = response.getEntity();
229 byte[] bytes = EntityUtils.toByteArray(responseEntity);
230 result = new String(bytes,"UTF-8");
231 } finally {
232 if (null != response) {
233 response.close();
234 }
235 httpclient.close();
236 }
237 return result;
238 }
239
240 @SuppressWarnings("deprecation")//没有设置请求头
241 public static String postByBodyString(String url, String bodyString) throws ClientProtocolException, IOException {
242 String result = "";
243 CloseableHttpClient httpclient = HttpClients.createDefault();
244 CloseableHttpResponse response = null;
245 try {
246 HttpPost httppost = new HttpPost(url);
247 StringEntity reqEntity = new StringEntity(bodyString, "UTF-8");
248 httppost.setEntity(reqEntity);
249
250 //设置连接超时5秒,请求超时1秒,返回数据超时8秒
251 // RequestConfig requestConfig = RequestConfig.custom()
252 // .setConnectTimeout(5000).setConnectionRequestTimeout(5000)
253 // .setSocketTimeout(8000).build();
254 // httppost.setConfig(requestConfig);
255 response = httpclient.execute(httppost);
256 HttpEntity responseEntity = response.getEntity();
257 byte[] bytes = EntityUtils.toByteArray(responseEntity);
258 result = new String(bytes,"UTF-8");
259 } finally {
260 if (null != response) {
261 response.close();
262 }
263 httpclient.close();
264 }
265 return result;
266 }
267
268
269 }