java http实例_Java常见发送http请求示例

1 importjava.io.FileOutputStream;2 importjava.io.IOException;3 importjava.io.InputStream;4 importjava.io.InputStreamReader;5 importjava.io.OutputStreamWriter;6 importjava.io.UnsupportedEncodingException;7 importjava.net.HttpURLConnection;8 importjava.net.Socket;9 importjava.net.URL;10 importjava.net.URLConnection;11 importjava.net.URLEncoder;12 importjava.util.ArrayList;13 importjava.util.HashMap;14 importjava.util.Iterator;15 importjava.util.List;16 importjava.util.Map;17 importjava.util.Map.Entry;18

19 importorg.apache.http.HttpResponse;20 importorg.apache.http.NameValuePair;21 importorg.apache.http.client.HttpClient;22 importorg.apache.http.client.entity.UrlEncodedFormEntity;23 importorg.apache.http.client.methods.HttpGet;24 importorg.apache.http.client.methods.HttpPost;25 importorg.apache.http.impl.client.DefaultHttpClient;26 importorg.apache.http.message.BasicNameValuePair;27

28 /**

29 * @Description:发送http请求帮助类30 *@author:liuyc31 * @time:2016年5月17日 下午3:25:3232 */

33 public classHttpClientHelper {34 /**

35 * @Description:使用HttpURLConnection发送post请求36 *@author:liuyc37 * @time:2016年5月17日 下午3:26:0738 */

39 public static String sendPost(String urlParam, Mapparams, String charset) {40 StringBuffer resultBuffer = null;41 //构建请求参数

42 StringBuffer sbParams = newStringBuffer();43 if (params != null && params.size() > 0) {44 for (Entrye : 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 = newURL(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 = newOutputStreamWriter(con.getOutputStream(), charset);65 osw.write(sbParams.substring(0, sbParams.length() - 1));66 osw.flush();67 }68 //读取返回内容

69 resultBuffer = newStringBuffer();70 int contentLength = Integer.parseInt(con.getHeaderField("Content-Length"));71 if (contentLength > 0) {72 br = new BufferedReader(newInputStreamReader(con.getInputStream(), charset));73 String temp;74 while ((temp = br.readLine()) != null) {75 resultBuffer.append(temp);76 }77 }78 } catch(Exception e) {79 throw newRuntimeException(e);80 } finally{81 if (osw != null) {82 try{83 osw.close();84 } catch(IOException e) {85 osw = null;86 throw newRuntimeException(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 newRuntimeException(e);100 } finally{101 if (con != null) {102 con.disconnect();103 con = null;104 }105 }106 }107 }108

109 returnresultBuffer.toString();110 }111

112 /**

113 * @Description:使用URLConnection发送post114 *@author:liuyc115 * @time:2016年5月17日 下午3:26:52116 */

117 public static String sendPost2(String urlParam, Mapparams, String charset) {118 StringBuffer resultBuffer = null;119 //构建请求参数

120 StringBuffer sbParams = newStringBuffer();121 if (params != null && params.size() > 0) {122 for (Entrye : 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 = newURL(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 = newOutputStreamWriter(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 = newStringBuffer();154 int contentLength = Integer.parseInt(con.getHeaderField("Content-Length"));155 if (contentLength > 0) {156 br = new BufferedReader(newInputStreamReader(con.getInputStream(), charset));157 String temp;158 while ((temp = br.readLine()) != null) {159 resultBuffer.append(temp);160 }161 }162 } catch(Exception e) {163 throw newRuntimeException(e);164 } finally{165 if (osw != null) {166 try{167 osw.close();168 } catch(IOException e) {169 osw = null;170 throw newRuntimeException(e);171 }172 }173 if (br != null) {174 try{175 br.close();176 } catch(IOException e) {177 br = null;178 throw newRuntimeException(e);179 }180 }181 }182 returnresultBuffer.toString();183 }184

185 /**

186 * @Description:发送get请求保存下载文件187 *@author:liuyc188 * @time:2016年5月17日 下午3:27:29189 */

190 public static void sendGetAndSaveFile(String urlParam, Mapparams, String fileSavePath) {191 //构建请求参数

192 StringBuffer sbParams = newStringBuffer();193 if (params != null && params.size() > 0) {194 for (Entryentry : 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 = newURL(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 = newFileOutputStream(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 newRuntimeException(e);224 } finally{225 if (os != null) {226 try{227 os.close();228 } catch(IOException e) {229 os = null;230 throw newRuntimeException(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 newRuntimeException(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, Mapparams, String charset) {260 StringBuffer resultBuffer = null;261 //构建请求参数

262 StringBuffer sbParams = newStringBuffer();263 if (params != null && params.size() > 0) {264 for (Entryentry : 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 = newURL(urlParam);279 }280 con =(HttpURLConnection) url.openConnection();281 con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");282 con.connect();283 resultBuffer = newStringBuffer();284 br = new BufferedReader(newInputStreamReader(con.getInputStream(), charset));285 String temp;286 while ((temp = br.readLine()) != null) {287 resultBuffer.append(temp);288 }289 } catch(Exception e) {290 throw newRuntimeException(e);291 } finally{292 if (br != null) {293 try{294 br.close();295 } catch(IOException e) {296 br = null;297 throw newRuntimeException(e);298 } finally{299 if (con != null) {300 con.disconnect();301 con = null;302 }303 }304 }305 }306 returnresultBuffer.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, Mapparams, String charset) {315 StringBuffer resultBuffer = null;316 //构建请求参数

317 StringBuffer sbParams = newStringBuffer();318 if (params != null && params.size() > 0) {319 for (Entryentry : 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 = newURL(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 = newStringBuffer();343 br = new BufferedReader(newInputStreamReader(con.getInputStream(), charset));344 String temp;345 while ((temp = br.readLine()) != null) {346 resultBuffer.append(temp);347 }348 } catch(Exception e) {349 throw newRuntimeException(e);350 } finally{351 if (br != null) {352 try{353 br.close();354 } catch(IOException e) {355 br = null;356 throw newRuntimeException(e);357 }358 }359 }360 returnresultBuffer.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, Mapparams, String charset) {369 StringBuffer resultBuffer = null;370 HttpClient client = newDefaultHttpClient();371 HttpPost httpPost = newHttpPost(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(newBasicNameValuePair(elem.getKey(), String.valueOf(elem.getValue())));378 }379 BufferedReader br = null;380 try{381 if (list.size() > 0) {382 UrlEncodedFormEntity entity = newUrlEncodedFormEntity(list, charset);383 httpPost.setEntity(entity);384 }385 HttpResponse response =client.execute(httpPost);386 //读取服务器响应数据

387 resultBuffer = newStringBuffer();388 br = new BufferedReader(newInputStreamReader(response.getEntity().getContent()));389 String temp;390 while ((temp = br.readLine()) != null) {391 resultBuffer.append(temp);392 }393 } catch(Exception e) {394 throw newRuntimeException(e);395 } finally{396 if (br != null) {397 try{398 br.close();399 } catch(IOException e) {400 br = null;401 throw newRuntimeException(e);402 }403 }404 }405 returnresultBuffer.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, Mapparams, String charset) {414 StringBuffer resultBuffer = null;415 HttpClient client = newDefaultHttpClient();416 BufferedReader br = null;417 //构建请求参数

418 StringBuffer sbParams = newStringBuffer();419 if (params != null && params.size() > 0) {420 for (Entryentry : 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 newRuntimeException(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 = newHttpGet(urlParam);435 try{436 HttpResponse response =client.execute(httpGet);437 //读取服务器响应数据

438 br = new BufferedReader(newInputStreamReader(response.getEntity().getContent()));439 String temp;440 resultBuffer = newStringBuffer();441 while ((temp = br.readLine()) != null) {442 resultBuffer.append(temp);443 }444 } catch(Exception e) {445 throw newRuntimeException(e);446 } finally{447 if (br != null) {448 try{449 br.close();450 } catch(IOException e) {451 br = null;452 throw newRuntimeException(e);453 }454 }455 }456 returnresultBuffer.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, Mapparams, String charset) {465 String result = "";466 //构建请求参数

467 StringBuffer sbParams = newStringBuffer();468 if (params != null && params.size() > 0) {469 for (Entryentry : 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 = newURL(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 = newSocket(host, port);488 StringBuffer sb = newStringBuffer();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 = newOutputStreamWriter(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 newRuntimeException(e);519 } finally{520 if (osw != null) {521 try{522 osw.close();523 } catch(IOException e) {524 osw = null;525 throw newRuntimeException(e);526 } finally{527 if (socket != null) {528 try{529 socket.close();530 } catch(IOException e) {531 socket = null;532 throw newRuntimeException(e);533 }534 }535 }536 }537 if (is != null) {538 try{539 is.close();540 } catch(IOException e) {541 is = null;542 throw newRuntimeException(e);543 } finally{544 if (socket != null) {545 try{546 socket.close();547 } catch(IOException e) {548 socket = null;549 throw newRuntimeException(e);550 }551 }552 }553 }554 }555 returnresult;556 }557

558 /**

559 * @Description:使用socket发送get请求560 *@author:liuyc561 * @time:2016年5月18日 上午9:27:18562 */

563 public static String sendSocketGet(String urlParam, Mapparams, String charset) {564 String result = "";565 //构建请求参数

566 StringBuffer sbParams = newStringBuffer();567 if (params != null && params.size() > 0) {568 for (Entryentry : 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 = newURL(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 = newSocket(host, port);587 StringBuffer sb = newStringBuffer();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 = newOutputStreamWriter(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 newRuntimeException(e);618 } finally{619 if (osw != null) {620 try{621 osw.close();622 } catch(IOException e) {623 osw = null;624 throw newRuntimeException(e);625 } finally{626 if (socket != null) {627 try{628 socket.close();629 } catch(IOException e) {630 socket = null;631 throw newRuntimeException(e);632 }633 }634 }635 }636 if (is != null) {637 try{638 is.close();639 } catch(IOException e) {640 is = null;641 throw newRuntimeException(e);642 } finally{643 if (socket != null) {644 try{645 socket.close();646 } catch(IOException e) {647 socket = null;648 throw newRuntimeException(e);649 }650 }651 }652 }653 }654 returnresult;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) throwsIOException {662 List lineByte = new ArrayList();663 bytetempByte;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 newString(resutlBytes, charset);683 }684

685 }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值