1 import java.io.FileOutputStream;
2 import java.io.IOException;
3 import java.io.InputStream;
4 import java.io.InputStreamReader;
5 import java.io.OutputStreamWriter;
6 import java.io.UnsupportedEncodingException;
7 import java.net.HttpURLConnection;
8 import java.net.Socket;
9 import java.net.URL;
10 import java.net.URLConnection;
11 import java.net.URLEncoder;
12 import java.util.ArrayList;
13 import java.util.HashMap;
14 import java.util.Iterator;
15 import java.util.List;
16 import java.util.Map;
17 import java.util.Map.Entry;
18
19 import org.apache.http.HttpResponse;
20 import org.apache.http.NameValuePair;
21 import org.apache.http.client.HttpClient;
22 import org.apache.http.client.entity.UrlEncodedFormEntity;
23 import org.apache.http.client.methods.HttpGet;
24 import org.apache.http.client.methods.HttpPost;
25 import org.apache.http.impl.client.DefaultHttpClient;
26 import org.apache.http.message.BasicNameValuePair;
27
28 /**
29 * @Description:发送http请求帮助类
30 * @author:liuyc
31 * @time:2016年5月17日 下午3:25:32
32 */
33 public class HttpClientHelper {
34 /**
35 * @Description:使用HttpURLConnection发送post请求
36 * @author:liuyc
37 * @time:2016年5月17日 下午3:26:07
38 */
39 public static String sendPost(String urlParam, Map<String, Object> params, String charset) {
40 StringBuffer resultBuffer = null;
41 // 构建请求参数
42 StringBuffer sbParams = new StringBuffer();
43 if (params != null && params.size() > 0) {
44 for (Entry<String, Object> e : params.entrySet()) {
45 sbParams.append(e.getKey());
46 sbParams.append("=");
47 sbParams.append(e.getValue());
48 sbParams.append("&");
49 }
50 }
51 HttpURLConnection con = null;
52 OutputStreamWriter osw = null;
53 BufferedReader br = null;
54 // 发送请求
55 try {
56 URL url = new URL(urlParam);
57 con = (HttpURLConnection) url.openConnection();
58 con.setRequestMethod("POST");
59 con.setDoOutput(true);
60 con.setDoInput(true);
61 con.setUseCaches(false);
62 con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
63 if (sbParams != null && sbParams.length() > 0) {
64 osw = new OutputStreamWriter(con.getOutputStream(), charset);
65 osw.write(sbParams.substring(0, sbParams.length() - 1));
66 osw.flush();
67 }
68 // 读取返回内容
69 resultBuffer = new StringBuffer();
70 int contentLength = Integer.parseInt(con.getHeaderField("Content-Length"));
71 if (contentLength > 0) {
72 br = new BufferedReader(new InputStreamReader(con.getInputStream(), charset));
73 String temp;
74 while ((temp = br.readLine()) != null) {
75 resultBuffer.append(temp);
76 }
77 }
78 } catch (Exception e) {
79 throw new RuntimeException(e);
80 } finally {
81 if (osw != null) {
82 try {
83 osw.close();
84 } catch (IOException e) {
85 osw = null;
86 throw new RuntimeException(e);
87 } finally {
88 if (con != null) {
89 con.disconnect();
90 con = null;
91 }
92 }
93 }
94 if (br != null) {
95 try {
96 br.close();
97 } catch (IOException e) {
98 br = null;
99 throw new RuntimeException(e);
100 } finally {
101 if (con != null) {
102 con.disconnect();
103 con = null;
104 }
105 }
106 }
107 }
108
109 return resultBuffer.toString();
110 }
111
112 /**
113 * @Description:使用URLConnection发送post
114 * @author:liuyc
115 * @time:2016年5月17日 下午3:26:52
116 */
117 public static String sendPost2(String urlParam, Map<String, Object> params, String charset) {
118 StringBuffer resultBuffer = null;
119 // 构建请求参数
120 StringBuffer sbParams = new StringBuffer();
121 if (params != null && params.size() > 0) {
122 for (Entry<String, Object> e : params.entrySet()) {
123 sbParams.append(e.getKey());
124 sbParams.append("=");
125 sbParams.append(e.getValue());
126 sbParams.append("&");
127 }
128 }
129 URLConnection con = null;
130 OutputStreamWriter osw = null;
131 BufferedReader br = null;
132 try {
133 URL realUrl = new URL(urlParam);
134 // 打开和URL之间的连接
135 con = realUrl.openConnection();
136 // 设置通用的请求属性
137 con.setRequestProperty("accept", "*/*");
138 con.setRequestProperty("connection", "Keep-Alive");
139 con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
140 con.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
141 // 发送POST请求必须设置如下两行
142 con.setDoOutput(true);
143 con.setDoInput(true);
144 // 获取URLConnection对象对应的输出流
145 osw = new OutputStreamWriter(con.getOutputStream(), charset);
146 if (sbParams != null && sbParams.length() > 0) {
147 // 发送请求参数
148 osw.write(sbParams.substring(0, sbParams.length() - 1));
149 // flush输出流的缓冲
150 osw.flush();
151 }
152 // 定义BufferedReader输入流来读取URL的响应
153 resultBuffer = new StringBuffer();
154 int contentLength = Integer.parseInt(con.getHeaderField("Content-Length"));
155 if (contentLength > 0) {
156 br = new BufferedReader(new InputStreamReader(con.getInputStream(), charset));
157 String temp;
158 while ((temp = br.readLine()) != null) {
159 resultBuffer.append(temp);
160 }
161 }
162 } catch (Exception e) {
163 throw new RuntimeException(e);
164 } finally {
165 if (osw != null) {
166 try {
167 osw.close();
168 } catch (IOException e) {
169 osw = null;
170 throw new RuntimeException(e);
171 }
172 }
173 if (br != null) {
174 try {
175 br.close();
176 } catch (IOException e) {
177 br = null;
178 throw new RuntimeException(e);
179 }
180 }
181 }
182 return resultBuffer.toString();
183 }
184
185 /**
186 * @Description:发送get请求保存下载文件
187 * @author:liuyc
188 * @time:2016年5月17日 下午3:27:29
189 */
190 public static void sendGetAndSaveFile(String urlParam, Map<String, Object> params, String fileSavePath) {
191 // 构建请求参数
192 StringBuffer sbParams = new StringBuffer();
193 if (params != null && params.size() > 0) {
194 for (Entry<String, Object> entry : params.entrySet()) {
195 sbParams.append(entry.getKey());
196 sbParams.append("=");
197 sbParams.append(entry.getValue());
198 sbParams.append("&");
199 }
200 }
201 HttpURLConnection con = null;
202 BufferedReader br = null;
203 FileOutputStream os = null;
204 try {
205 URL url = null;
206 if (sbParams != null && sbParams.length() > 0) {
207 url = new URL(urlParam + "?" + sbParams.substring(0, sbParams.length() - 1));
208 } else {
209 url = new URL(urlParam);
210 }
211 con = (HttpURLConnection) url.openConnection();
212 con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
213 con.connect();
214 InputStream is = con.getInputStream();
215 os = new FileOutputStream(fileSavePath);
216 byte buf[] = new byte[1024];
217 int count = 0;
218 while ((count = is.read(buf)) != -1) {
219 os.write(buf, 0, count);
220 }
221 os.flush();
222 } catch (Exception e) {
223 throw new RuntimeException(e);
224 } finally {
225 if (os != null) {
226 try {
227 os.close();
228 } catch (IOException e) {
229 os = null;
230 throw new RuntimeException(e);
231 } finally {
232 if (con != null) {
233 con.disconnect();
234 con = null;
235 }
236 }
237 }
238 if (br != null) {
239 try {
240 br.close();
241 } catch (IOException e) {
242 br = null;
243 throw new RuntimeException(e);
244 } finally {
245 if (con != null) {
246 con.disconnect();
247 con = null;
248 }
249 }
250 }
251 }
252 }
253
254 /**
255 * @Description:使用HttpURLConnection发送get请求
256 * @author:liuyc
257 * @time:2016年5月17日 下午3:27:29
258 */
259 public static String sendGet(String urlParam, Map<String, Object> params, String charset) {
260 StringBuffer resultBuffer = null;
261 // 构建请求参数
262 StringBuffer sbParams = new StringBuffer();
263 if (params != null && params.size() > 0) {
264 for (Entry<String, Object> entry : params.entrySet()) {
265 sbParams.append(entry.getKey());
266 sbParams.append("=");
267 sbParams.append(entry.getValue());
268 sbParams.append("&");
269 }
270 }
271 HttpURLConnection con = null;
272 BufferedReader br = null;
273 try {
274 URL url = null;
275 if (sbParams != null && sbParams.length() > 0) {
276 url = new URL(urlParam + "?" + sbParams.substring(0, sbParams.length() - 1));
277 } else {
278 url = new URL(urlParam);
279 }
280 con = (HttpURLConnection) url.openConnection();
281 con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
282 con.connect();
283 resultBuffer = new StringBuffer();
284 br = new BufferedReader(new InputStreamReader(con.getInputStream(), charset));
285 String temp;
286 while ((temp = br.readLine()) != null) {
287 resultBuffer.append(temp);
288 }
289 } catch (Exception e) {
290 throw new RuntimeException(e);
291 } finally {
292 if (br != null) {
293 try {
294 br.close();
295 } catch (IOException e) {
296 br = null;
297 throw new RuntimeException(e);
298 } finally {
299 if (con != null) {
300 con.disconnect();
301 con = null;
302 }
303 }
304 }
305 }
306 return resultBuffer.toString();
307 }
308
309 /**
310 * @Description:使用URLConnection发送get请求
311 * @author:liuyc
312 * @time:2016年5月17日 下午3:27:58
313 */
314 public static String sendGet2(String urlParam, Map<String, Object> params, String charset) {
315 StringBuffer resultBuffer = null;
316 // 构建请求参数
317 StringBuffer sbParams = new StringBuffer();
318 if (params != null && params.size() > 0) {
319 for (Entry<String, Object> entry : params.entrySet()) {
320 sbParams.append(entry.getKey());
321 sbParams.append("=");
322 sbParams.append(entry.getValue());
323 sbParams.append("&");
324 }
325 }
326 BufferedReader br = null;
327 try {
328 URL url = null;
329 if (sbParams != null && sbParams.length() > 0) {
330 url = new URL(urlParam + "?" + sbParams.substring(0, sbParams.length() - 1));
331 } else {
332 url = new URL(urlParam);
333 }
334 URLConnection con = url.openConnection();
335 // 设置请求属性
336 con.setRequestProperty("accept", "*/*");
337 con.setRequestProperty("connection", "Keep-Alive");
338 con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
339 con.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
340 // 建立连接
341 con.connect();
342 resultBuffer = new StringBuffer();
343 br = new BufferedReader(new InputStreamReader(con.getInputStream(), charset));
344 String temp;
345 while ((temp = br.readLine()) != null) {
346 resultBuffer.append(temp);
347 }
348 } catch (Exception e) {
349 throw new RuntimeException(e);
350 } finally {
351 if (br != null) {
352 try {
353 br.close();
354 } catch (IOException e) {
355 br = null;
356 throw new RuntimeException(e);
357 }
358 }
359 }
360 return resultBuffer.toString();
361 }
362
363 /**
364 * @Description:使用HttpClient发送post请求
365 * @author:liuyc
366 * @time:2016年5月17日 下午3:28:23
367 */
368 public static String httpClientPost(String urlParam, Map<String, Object> params, String charset) {
369 StringBuffer resultBuffer = null;
370 HttpClient client = new DefaultHttpClient();
371 HttpPost httpPost = new HttpPost(urlParam);
372 // 构建请求参数
373 List<NameValuePair> list = new ArrayList<NameValuePair>();
374 Iterator<Entry<String, Object>> iterator = params.entrySet().iterator();
375 while (iterator.hasNext()) {
376 Entry<String, Object> elem = iterator.next();
377 list.add(new BasicNameValuePair(elem.getKey(), String.valueOf(elem.getValue())));
378 }
379 BufferedReader br = null;
380 try {
381 if (list.size() > 0) {
382 UrlEncodedFormEntity entity = new UrlEncodedFormEntity(list, charset);
383 httpPost.setEntity(entity);
384 }
385 HttpResponse response = client.execute(httpPost);
386 // 读取服务器响应数据
387 resultBuffer = new StringBuffer();
388 br = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
389 String temp;
390 while ((temp = br.readLine()) != null) {
391 resultBuffer.append(temp);
392 }
393 } catch (Exception e) {
394 throw new RuntimeException(e);
395 } finally {
396 if (br != null) {
397 try {
398 br.close();
399 } catch (IOException e) {
400 br = null;
401 throw new RuntimeException(e);
402 }
403 }
404 }
405 return resultBuffer.toString();
406 }
407
408 /**
409 * @Description:使用HttpClient发送get请求
410 * @author:liuyc
411 * @time:2016年5月17日 下午3:28:56
412 */
413 public static String httpClientGet(String urlParam, Map<String, Object> params, String charset) {
414 StringBuffer resultBuffer = null;
415 HttpClient client = new DefaultHttpClient();
416 BufferedReader br = null;
417 // 构建请求参数
418 StringBuffer sbParams = new StringBuffer();
419 if (params != null && params.size() > 0) {
420 for (Entry<String, Object> entry : params.entrySet()) {
421 sbParams.append(entry.getKey());
422 sbParams.append("=");
423 try {
424 sbParams.append(URLEncoder.encode(String.valueOf(entry.getValue()), charset));
425 } catch (UnsupportedEncodingException e) {
426 throw new RuntimeException(e);
427 }
428 sbParams.append("&");
429 }
430 }
431 if (sbParams != null && sbParams.length() > 0) {
432 urlParam = urlParam + "?" + sbParams.substring(0, sbParams.length() - 1);
433 }
434 HttpGet httpGet = new HttpGet(urlParam);
435 try {
436 HttpResponse response = client.execute(httpGet);
437 // 读取服务器响应数据
438 br = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
439 String temp;
440 resultBuffer = new StringBuffer();
441 while ((temp = br.readLine()) != null) {
442 resultBuffer.append(temp);
443 }
444 } catch (Exception e) {
445 throw new RuntimeException(e);
446 } finally {
447 if (br != null) {
448 try {
449 br.close();
450 } catch (IOException e) {
451 br = null;
452 throw new RuntimeException(e);
453 }
454 }
455 }
456 return resultBuffer.toString();
457 }
458
459 /**
460 * @Description:使用socket发送post请求
461 * @author:liuyc
462 * @time:2016年5月18日 上午9:26:22
463 */
464 public static String sendSocketPost(String urlParam, Map<String, Object> params, String charset) {
465 String result = "";
466 // 构建请求参数
467 StringBuffer sbParams = new StringBuffer();
468 if (params != null && params.size() > 0) {
469 for (Entry<String, Object> entry : params.entrySet()) {
470 sbParams.append(entry.getKey());
471 sbParams.append("=");
472 sbParams.append(entry.getValue());
473 sbParams.append("&");
474 }
475 }
476 Socket socket = null;
477 OutputStreamWriter osw = null;
478 InputStream is = null;
479 try {
480 URL url = new URL(urlParam);
481 String host = url.getHost();
482 int port = url.getPort();
483 if (-1 == port) {
484 port = 80;
485 }
486 String path = url.getPath();
487 socket = new Socket(host, port);
488 StringBuffer sb = new StringBuffer();
489 sb.append("POST " + path + " HTTP/1.1\r\n");
490 sb.append("Host: " + host + "\r\n");
491 sb.append("Connection: Keep-Alive\r\n");
492 sb.append("Content-Type: application/x-www-form-urlencoded; charset=utf-8 \r\n");
493 sb.append("Content-Length: ").append(sb.toString().getBytes().length).append("\r\n");
494 // 这里一个回车换行,表示消息头写完,不然服务器会继续等待
495 sb.append("\r\n");
496 if (sbParams != null && sbParams.length() > 0) {
497 sb.append(sbParams.substring(0, sbParams.length() - 1));
498 }
499 osw = new OutputStreamWriter(socket.getOutputStream());
500 osw.write(sb.toString());
501 osw.flush();
502 is = socket.getInputStream();
503 String line = null;
504 // 服务器响应体数据长度
505 int contentLength = 0;
506 // 读取http响应头部信息
507 do {
508 line = readLine(is, 0, charset);
509 if (line.startsWith("Content-Length")) {
510 // 拿到响应体内容长度
511 contentLength = Integer.parseInt(line.split(":")[1].trim());
512 }
513 // 如果遇到了一个单独的回车换行,则表示请求头结束
514 } while (!line.equals("\r\n"));
515 // 读取出响应体数据(就是你要的数据)
516 result = readLine(is, contentLength, charset);
517 } catch (Exception e) {
518 throw new RuntimeException(e);
519 } finally {
520 if (osw != null) {
521 try {
522 osw.close();
523 } catch (IOException e) {
524 osw = null;
525 throw new RuntimeException(e);
526 } finally {
527 if (socket != null) {
528 try {
529 socket.close();
530 } catch (IOException e) {
531 socket = null;
532 throw new RuntimeException(e);
533 }
534 }
535 }
536 }
537 if (is != null) {
538 try {
539 is.close();
540 } catch (IOException e) {
541 is = null;
542 throw new RuntimeException(e);
543 } finally {
544 if (socket != null) {
545 try {
546 socket.close();
547 } catch (IOException e) {
548 socket = null;
549 throw new RuntimeException(e);
550 }
551 }
552 }
553 }
554 }
555 return result;
556 }
557
558 /**
559 * @Description:使用socket发送get请求
560 * @author:liuyc
561 * @time:2016年5月18日 上午9:27:18
562 */
563 public static String sendSocketGet(String urlParam, Map<String, Object> params, String charset) {
564 String result = "";
565 // 构建请求参数
566 StringBuffer sbParams = new StringBuffer();
567 if (params != null && params.size() > 0) {
568 for (Entry<String, Object> entry : params.entrySet()) {
569 sbParams.append(entry.getKey());
570 sbParams.append("=");
571 sbParams.append(entry.getValue());
572 sbParams.append("&");
573 }
574 }
575 Socket socket = null;
576 OutputStreamWriter osw = null;
577 InputStream is = null;
578 try {
579 URL url = new URL(urlParam);
580 String host = url.getHost();
581 int port = url.getPort();
582 if (-1 == port) {
583 port = 80;
584 }
585 String path = url.getPath();
586 socket = new Socket(host, port);
587 StringBuffer sb = new StringBuffer();
588 sb.append("GET " + path + " HTTP/1.1\r\n");
589 sb.append("Host: " + host + "\r\n");
590 sb.append("Connection: Keep-Alive\r\n");
591 sb.append("Content-Type: application/x-www-form-urlencoded; charset=utf-8 \r\n");
592 sb.append("Content-Length: ").append(sb.toString().getBytes().length).append("\r\n");
593 // 这里一个回车换行,表示消息头写完,不然服务器会继续等待
594 sb.append("\r\n");
595 if (sbParams != null && sbParams.length() > 0) {
596 sb.append(sbParams.substring(0, sbParams.length() - 1));
597 }
598 osw = new OutputStreamWriter(socket.getOutputStream());
599 osw.write(sb.toString());
600 osw.flush();
601 is = socket.getInputStream();
602 String line = null;
603 // 服务器响应体数据长度
604 int contentLength = 0;
605 // 读取http响应头部信息
606 do {
607 line = readLine(is, 0, charset);
608 if (line.startsWith("Content-Length")) {
609 // 拿到响应体内容长度
610 contentLength = Integer.parseInt(line.split(":")[1].trim());
611 }
612 // 如果遇到了一个单独的回车换行,则表示请求头结束
613 } while (!line.equals("\r\n"));
614 // 读取出响应体数据(就是你要的数据)
615 result = readLine(is, contentLength, charset);
616 } catch (Exception e) {
617 throw new RuntimeException(e);
618 } finally {
619 if (osw != null) {
620 try {
621 osw.close();
622 } catch (IOException e) {
623 osw = null;
624 throw new RuntimeException(e);
625 } finally {
626 if (socket != null) {
627 try {
628 socket.close();
629 } catch (IOException e) {
630 socket = null;
631 throw new RuntimeException(e);
632 }
633 }
634 }
635 }
636 if (is != null) {
637 try {
638 is.close();
639 } catch (IOException e) {
640 is = null;
641 throw new RuntimeException(e);
642 } finally {
643 if (socket != null) {
644 try {
645 socket.close();
646 } catch (IOException e) {
647 socket = null;
648 throw new RuntimeException(e);
649 }
650 }
651 }
652 }
653 }
654 return result;
655 }
656
657 /**
658 * @Description:读取一行数据,contentLe内容长度为0时,读取响应头信息,不为0时读正文
659 * @time:2016年5月17日 下午6:11:07
660 */
661 private static String readLine(InputStream is, int contentLength, String charset) throws IOException {
662 List<Byte> lineByte = new ArrayList<Byte>();
663 byte tempByte;
664 int cumsum = 0;
665 if (contentLength != 0) {
666 do {
667 tempByte = (byte) is.read();
668 lineByte.add(Byte.valueOf(tempByte));
669 cumsum++;
670 } while (cumsum < contentLength);// cumsum等于contentLength表示已读完
671 } else {
672 do {
673 tempByte = (byte) is.read();
674 lineByte.add(Byte.valueOf(tempByte));
675 } while (tempByte != 10);// 换行符的ascii码值为10
676 }
677
678 byte[] resutlBytes = new byte[lineByte.size()];
679 for (int i = 0; i < lineByte.size(); i++) {
680 resutlBytes[i] = (lineByte.get(i)).byteValue();
681 }
682 return new String(resutlBytes, charset);
683 }
684
685 }