【Java进阶营】java实现HTTP请求的三种方式

目前JAVA实现HTTP请求的方法用的最多的有两种:一种是通过HTTPClient这种第三方的开源框架去实现。HTTPClient对HTTP的封装性比较不错,通过它基本上能够满足我们大部分的需求,HttpClient3.1 是 org.apache.commons.httpclient下操作远程 url的工具包,虽然已不再更新,但实现工作中使用httpClient3.1的代码还是很多,HttpClient4.5是org.apache.http.client下操作远程 url的工具包,最新的;另一种则是通过HttpURLConnection去实现,HttpURLConnection是JAVA的标准类,是JAVA比较原生的一种实现方式。

自己在工作中三种方式都用到过,总结一下分享给大家,也方便自己以后使用,话不多说上代码。

第一种方式:java原生HttpURLConnection
package com.powerX.httpClient;
  import java.io.BufferedReader;
  import java.io.IOException;
  import java.io.InputStream;
  import java.io.InputStreamReader;
  import java.io.OutputStream;
  import java.net.HttpURLConnection;
  import java.net.MalformedURLException;
  import java.net.URL;
  public class HttpClient {
  public static String doGet(String httpurl) {
  HttpURLConnection connection = null;
  InputStream is = null;
  BufferedReader br = null;
  String result = null;
// 返回结果字符串
  try {
  // 创建远程url连接对象
  URL url = new URL(httpurl);
  // 通过远程url连接对象打开一个连接,强转成httpURLConnection类
  connection = (HttpURLConnection) url.openConnection();
  // 设置连接方式:get
  connection.setRequestMethod(“GET”);
  // 设置连接主机服务器的超时时间:15000毫秒
  connection.setConnectTimeout(15000);
  // 设置读取远程返回的数据时间:60000毫秒
  connection.setReadTimeout(60000);
  // 发送请求
  connection.connect();
  // 通过connection连接,获取输入流
  if (connection.getResponseCode() == 200) {
  is = connection.getInputStream();
  // 封装输入流is,并指定字符集
  br = new BufferedReader(new InputStreamReader(is, “UTF-8”));
  // 存放数据
  StringBuffer sbf = new StringBuffer();
  String temp = null;
  while ((temp = br.readLine()) != null) {
  sbf.append(temp);
  sbf.append(“rn”);
  }
  result = sbf.toString();
  }
  } catch (MalformedURLException e) {
  e.printStackTrace();
  } catch (IOException e) {
  e.printStackTrace();
  } finally {
  // 关闭资源
  if (null != br) {
  try {
  br.close();
  } catch (IOException e) {
  e.printStackTrace();
  }
  }
  if (null != is) {
  try {
  is.close();
  } catch (IOException e) {
  e.printStackTrace();
  }
  }
  connection.disconnect();// 关闭远程连接
  }
  return result;
  }
  public static String doPost(String httpUrl, String param) {
  HttpURLConnection connection = null;
  InputStream is = null;
  OutputStream os = null;
  BufferedReader br = null;
  String result = null;
  try {
  URL url = new URL(httpUrl);
  // 通过远程url连接对象打开连接
  connection = (HttpURLConnection) url.openConnection();
  // 设置连接请求方式
  connection.setRequestMethod(“POST”);
  // 设置连接主机服务器超时时间:15000毫秒
  connection.setConnectTimeout(15000);
  // 设置读取主机服务器返回数据超时时间:60000毫秒
  connection.setReadTimeout(60000);
  // 默认值为:false,当向远程服务器传送数据/写数据时,需要设置为true
  connection.setDoOutput(true);
  // 默认值为:true,当前向远程服务读取数据时,设置为true,该参数可有可无
  connection.setDoInput(true);
  // 设置传入参数的格式:请求参数应该是 name1=value1&name2=value2 的形式。
  connection.setRequestProperty(“Content-Type”, “application/x-www-form-urlencoded”);
  // 设置鉴权信息:Authorization: Bearer da3efcbf-0845-4fe3-8aba-ee040be542c0
  connection.setRequestProperty(“Authorization”, “Bearer da3efcbf-0845-4fe3-8aba-ee040be542c0”);
  // 通过连接对象获取一个输出流
  os = connection.getOutputStream();
  // 通过输出流对象将参数写出去/传输出去,它是通过字节数组写出的
  os.write(param.getBytes());
  // 通过连接对象获取一个输入流,向远程读取
  if (connection.getResponseCode() == 200) {
  is = connection.getInputStream();
  // 对输入流对象进行包装:charset根据工作项目组的要求来设置
  br = new BufferedReader(new InputStreamReader(is, “UTF-8”));
  StringBuffer sbf = new StringBuffer();
  String temp = null;
  // 循环遍历一行一行读取数据
  while ((temp = br.readLine()) != null) {
  sbf.append(temp);
  sbf.append(“rn”);
  }
  result = sbf.toString();
  }
  } catch (MalformedURLException e) {
  e.printStackTrace();
  } catch (IOException e) {
  e.printStackTrace();
  } finally {
  // 关闭资源
  if (null != br) {
  try {
  br.close();
  } catch (IOException e) {
  e.printStackTrace();
  }
  }
  if (null != os) {
  try {
  os.close();
  } catch (IOException e) {
  e.printStackTrace();
  }
  }
  if (null != is) {
  try {
  is.close();
  } catch (IOException e) {
  e.printStackTrace();
  }
  }
  // 断开与远程地址url的连接
  connection.disconnect();
  }
  return result;
  }
  }

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151

第二种方式:apache HttpClient3.1
 package com.powerX.httpClient;
  import java.io.BufferedReader;
  import java.io.IOException;
  import java.io.InputStream;
  import java.io.InputStr

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值