博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java 常见几种发送http请求案例[转]
阅读量:5930 次
发布时间:2019-06-19

本文共 20839 字,大约阅读时间需要 69 分钟。

转自

以下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
params, String charset) { 40 StringBuffer resultBuffer = null; 41 // 构建请求参数 42 StringBuffer sbParams = new StringBuffer(); 43 if (params != null && params.size() > 0) { 44 for (Entry
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发送post114 * @author:liuyc115 * @time:2016年5月17日 下午3:26:52116 */117 public static String sendPost2(String urlParam, Map
params, String charset) {118 StringBuffer resultBuffer = null;119 // 构建请求参数120 StringBuffer sbParams = new StringBuffer();121 if (params != null && params.size() > 0) {122 for (Entry
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:liuyc188 * @time:2016年5月17日 下午3:27:29189 */190 public static void sendGetAndSaveFile(String urlParam, Map
params, String fileSavePath) {191 // 构建请求参数192 StringBuffer sbParams = new StringBuffer();193 if (params != null && params.size() > 0) {194 for (Entry
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:liuyc257 * @time:2016年5月17日 下午3:27:29258 */259 public static String sendGet(String urlParam, Map
params, String charset) {260 StringBuffer resultBuffer = null;261 // 构建请求参数262 StringBuffer sbParams = new StringBuffer();263 if (params != null && params.size() > 0) {264 for (Entry
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:liuyc312 * @time:2016年5月17日 下午3:27:58313 */314 public static String sendGet2(String urlParam, Map
params, String charset) {315 StringBuffer resultBuffer = null;316 // 构建请求参数317 StringBuffer sbParams = new StringBuffer();318 if (params != null && params.size() > 0) {319 for (Entry
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:liuyc366 * @time:2016年5月17日 下午3:28:23367 */368 public static String httpClientPost(String urlParam, Map
params, String charset) {369 StringBuffer resultBuffer = null;370 HttpClient client = new DefaultHttpClient();371 HttpPost httpPost = new HttpPost(urlParam);372 // 构建请求参数373 List
list = new ArrayList
();374 Iterator
> iterator = params.entrySet().iterator();375 while (iterator.hasNext()) {376 Entry
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:liuyc411 * @time:2016年5月17日 下午3:28:56412 */413 public static String httpClientGet(String urlParam, Map
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
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:liuyc462 * @time:2016年5月18日 上午9:26:22463 */464 public static String sendSocketPost(String urlParam, Map
params, String charset) {465 String result = "";466 // 构建请求参数467 StringBuffer sbParams = new StringBuffer();468 if (params != null && params.size() > 0) {469 for (Entry
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:liuyc561 * @time:2016年5月18日 上午9:27:18562 */563 public static String sendSocketGet(String urlParam, Map
params, String charset) {564 String result = "";565 // 构建请求参数566 StringBuffer sbParams = new StringBuffer();567 if (params != null && params.size() > 0) {568 for (Entry
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:07660 */661 private static String readLine(InputStream is, int contentLength, String charset) throws IOException {662 List
lineByte = new ArrayList
();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码值为10676 }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 }

 

转载于:https://www.cnblogs.com/Youngly/p/8695031.html

你可能感兴趣的文章
【物联网智能网关-16】成功移植SQLite(STM32 .NET MF平台)
查看>>
成长型企业的战略误区
查看>>
思科CCNA200-120***配置前必须理解的***基础
查看>>
WFQ加权公平队列(每个队列的计算原则与权重比关系)加权效果后转发取证
查看>>
如何提高SEO优化团队效率
查看>>
SQL PASS西雅图之行——University of Washington篇
查看>>
OpenStack(Kilo版本)网络服务neutron的安装部署
查看>>
Oracle 初始化参数&性能视图
查看>>
NetApp携手长虹佳华共绘云版图
查看>>
Androi“.NET研究”d如何在三年时间里征服移动世界的
查看>>
绑定变量及其优缺点
查看>>
35 vs 53怎么裁
查看>>
使用sublime text 2开发Javacript和jQuery
查看>>
关于js智能提示的封装(修订版)
查看>>
进程和线程的区别
查看>>
javascript suggest效果
查看>>
AWS应用托管经济学
查看>>
Lotus Quickr 8.5.1 for Domino 中目录服务的配置详解
查看>>
Solidot | 地球上有多少Java程序员?
查看>>
开发者应该了解的 12 款 Eclipse 插件 - 编程语言 - ITeye资讯
查看>>