1 package com.ad.ssp.engine.common;
2
3 import java.io.IOException;
4 import java.util.ArrayList;
5 import java.util.List;
6 import java.util.Map;
7 import java.util.Map.Entry;
8
9 import org.apache.http.Header;
10 import org.apache.http.entity.ByteArrayEntity;
11 import org.apache.http.entity.ContentType;
12 import org.apache.http.entity.StringEntity;
13 import org.apache.http.message.BasicHeader;
14 import org.apache.logging.log4j.LogManager;
15 import org.apache.logging.log4j.Logger;
16
17 import com.adwm.lib.http.HttpClient;
18 import com.adwm.lib.http.HttpResult;
19
20 /**
21 * 对HttpClient类的进一步封装,使之调用更方便。另外,此类管理唯一的HttpClient对象,支持线程池调用,效率更高
22 *
23 *
24 */
25 public class HttpClientUtil {
26 private static final Logger logger = LogManager.getLogger(HttpClientUtil.class);
27
28 // private static HttpClient client = new HttpClient(600);
29 private static HttpClient client = new HttpClient();
30
31 public static HttpClient getInstance() {
32 return client;
33 }
34
35 /**
36 * form方式提交http post请求
37 *
38 * @param targetUrl
39 * 目标url地址
40 * @param headers
41 * header请求参数集合
42 * @param postParams
43 * body请求参数集合
44 * @param timeout
45 * 超时时间(单位为毫秒)
46 * @return 返回的http body体经utf8编码后的字符串
47 */
48 public static String postKVParams1(String targetUrl, Map<String, String> headers, Map<String, Object> postParams,
49 int timeout) {
50 List<Header> headerList = getHeaderList(headers);
51 try {
52 HttpResult hr = client.post(targetUrl, headerList, postParams, timeout);
53 if (hr.getStatus() == 200)
54 return hr.getContentAsString();
55 else {
56 logger.warn("The request url is: {}, its reponse code is: {}", targetUrl, hr.getStatus());
57 }
58 } catch (IOException e) {
59 // TODO Auto-generated catch block
60 e.printStackTrace();
61 }
62
63 return null;
64 }
65
66 private static List<Header> getHeaderList(Map<String, String> headers) {
67 if (headers != null && headers.size() > 0) {
68 List<Header> headerList = new ArrayList<Header>();
69 for (Entry<String, String> entry : headers.entrySet()) {
70 headerList.add(new BasicHeader(entry.getKey(), entry.getValue()));
71 }
72 return headerList;
73 }
74
75 return null;
76 }
77
78 /**
79 * form方式提交http post请求
80 *
81 * @param targetUrl
82 * 目标url地址
83 * @param headers
84 * header请求参数集合
85 * @param postParams
86 * body请求参数集合
87 * @param timeout
88 * 超时时间(单位为毫秒)
89 * @return 未处理的HttpResult对象,供调用方自己解析和处理
90 */
91 public static HttpResult postKVParams2(String targetUrl, Map<String, String> headers,
92 Map<String, Object> postParams, int timeout) {
93 List<Header> headerList = getHeaderList(headers);
94 try {
95 return client.post(targetUrl, headerList, postParams, timeout);
96 } catch (IOException e) {
97 // TODO Auto-generated catch block
98 e.printStackTrace();
99 }
100
101 return null;
102 }
103
104 /**
105 * 用post方法提交json字符串参数
106 *
107 * @param targetUrl
108 * 目标url地址
109 * @param headers
110 * header请求参数集合
111 * @param jsonBody
112 * json字符串
113 * @param timeout
114 * 超时时间(单位为毫秒)
115 * @return 返回的http body体经utf8编码后的字符串
116 */
117 public static String postJsonParams1(String targetUrl, Map<String, String> headers, String jsonBody, int timeout) throws Exception {
118 List<Header> headerList = getHeaderList(headers);
119
120 StringEntity entity = new StringEntity(jsonBody, "UTF-8");
121 entity.setContentType("application/json");
122 entity.setContentEncoding("UTF-8");
123 HttpResult httpRst = client.post(targetUrl, headerList, entity, timeout);
124 if(httpRst.getStatus() == ResponseCodeUtil.HTTP_STATUS_OK)
125 return httpRst.getContentAsString();
126 else {
127 logger.warn("The request url is: {}, its reponse code is: {}", targetUrl, httpRst.getStatus());
128 }
129
130 return null;
131 }
132
133 /**
134 * 用post方法提交json字符串参数
135 *
136 * @param targetUrl
137 * 目标url地址
138 * @param headers
139 * header请求参数集合
140 * @param jsonBody
141 * json字符串
142 * @param timeout
143 * 超时时间(单位为毫秒)
144 * @return 未处理的HttpResult对象,供调用方自己解析和处理
145 */
146 public static HttpResult postJsonParams2(String targetUrl, Map<String, String> headers, String jsonBody,
147 int timeout) throws Exception {
148 List<Header> headerList = getHeaderList(headers);
149 StringEntity entity = new StringEntity(jsonBody, "UTF-8");
150 entity.setContentType("application/json");
151 return client.post(targetUrl, headerList, entity, timeout);
152 }
153
154 /**
155 * 通过POST方式发起protocol请求
156 * @param url
157 * @param headers
158 * @param content
159 * @param timeout
160 * @return
161 */
162 public static byte[] postProtobuf(String url, Map<String, String> headers, byte[] content, int timeout) throws Exception {
163 List<Header> headerList = getHeaderList(headers);
164 ByteArrayEntity entity = new ByteArrayEntity(content, ContentType.APPLICATION_OCTET_STREAM);
165 HttpResult httpResult = client.post(url, headerList, entity, timeout);
166 if (httpResult.getStatus() == ResponseCodeUtil.HTTP_STATUS_OK){
167 return httpResult.getContent();
168 } else {
169 logger.warn("The request url is: {}, its reponse code is: {}", url, httpResult.getStatus());
170 }
171 return null;
172 }
173
174 /**
175 * 以get方法请求url
176 *
177 * @param targetUrl
178 * 目标url地址
179 * @param headers
180 * header请求参数集合
181 * @param timeout
182 * 超时时间(单位为毫秒)
183 * @return 返回的http body体经utf8编码后的字符串
184 */
185 public static String get1(String targetUrl, Map<String, String> headers, int timeout) throws Exception {
186 List<Header> headerList = getHeaderList(headers);
187 HttpResult httpRst = client.get(targetUrl, headerList, timeout);
188 if(httpRst.getStatus() == ResponseCodeUtil.HTTP_STATUS_OK)
189 return httpRst.getContentAsString();
190 else {
191 logger.warn("The request url is: {}, its reponse code is: {}", targetUrl, httpRst.getStatus());
192 }
193 return null;
194 }
195
196 /**
197 * 以get方法请求url
198 *
199 * @param targetUrl
200 * 目标url地址
201 * @param headers
202 * header请求参数集合
203 * @param timeout
204 * 超时时间(单位为毫秒)
205 * @return 未处理的HttpResult对象,供调用方自己解析和处理
206 */
207 public static HttpResult get2(String targetUrl, Map<String, String> headers, int timeout) throws Exception {
208 List<Header> headerList = getHeaderList(headers);
209 return client.get(targetUrl, headerList, timeout);
210 }
211
212 }
Http请求封装(对HttpClient类的进一步封装,使之调用更方便。另外,此类管理唯一的HttpClient对象,支持线程池调用,效率更高)
点赞
收藏