java 常见几种发送http请求案例[转]

转自https://blog.csdn.net/u010197591/article/details/51441399

以下4种分别可发送get和post请求的方法,

  • 第1种:HttpURLConnection
  • 第2种:URLConnection
  • 第3种:HttpClient
  • 第4种:Socket

要注意的是,使用第3种HttpClient时需要依赖于三个jar包,分别是:apache-httpcomponents-httpclient.jar、commons-logging-1.0.4.jar、httpcore-4.1.1.jar。

 

  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 }

 

posted @ 2018-04-02 16:41  Youngly  阅读(398)  评论(0编辑  收藏  举报