java模拟https请求_java中模拟http(https)请求的工具类

packagecom.m_gecko.util;importjava.io.BufferedReader;importjava.io.IOException;importjava.io.InputStream;importjava.io.InputStreamReader;importjava.io.OutputStream;importjava.io.OutputStreamWriter;importjava.io.PrintWriter;importjava.io.UnsupportedEncodingException;importjava.net.ConnectException;importjava.net.HttpURLConnection;importjava.net.MalformedURLException;importjava.net.URL;importjava.net.URLEncoder;importjava.util.List;importjava.util.Map;importjavax.net.ssl.HttpsURLConnection;importjavax.net.ssl.SSLContext;importjavax.net.ssl.SSLSocketFactory;importjavax.net.ssl.TrustManager;importorg.apache.commons.io.IOUtils;public classHttpUtil {/*** 模拟http的get请求,获取响应(输入流),然后把输入流转为

*

*@paramurl

*@return

*/

public staticString httpGet(String url) {

HttpURLConnection connection= null;

InputStream response= null;try{

connection= (HttpURLConnection) newURL(url).openConnection();

connection.setConnectTimeout(10000);

connection.setReadTimeout(10000);

response=connection.getInputStream();if (response != null) {

String nextLine= IOUtils.toString(response, "utf-8");returnnextLine;

}

}catch(MalformedURLException e) {

e.printStackTrace();

}catch(IOException e) {

e.printStackTrace();

}finally{if (response != null)try{

response.close();

}catch(IOException e) {

e.printStackTrace();

}if (connection != null) {

connection.disconnect();

connection= null;

}

}return null;

}/*** 模拟http的post请求,类似上面

*

*@paramurl

*@return

*/

public staticString httpPost(String url) {

HttpURLConnection connection= null;

InputStream response= null;try{

connection= (HttpURLConnection) newURL(url).openConnection();

connection.setConnectTimeout(30000);

connection.setReadTimeout(30000);//发送POST请求必须设置如下两行

connection.setDoOutput(true);

connection.setDoInput(true);

response=connection.getInputStream();if (response != null) {

String nextLine= IOUtils.toString(response, "utf-8");returnnextLine;

}

}catch(MalformedURLException e) {

e.printStackTrace();

}catch(IOException e) {

e.printStackTrace();

}finally{if (response != null)try{

response.close();

}catch(IOException e) {

e.printStackTrace();

}if (connection != null) {

connection.disconnect();

connection= null;

}

}return null;

}/*** 向指定URL发送GET方法的请求

*

*@paramurl

* 发送请求的URL

*@paramparam

* 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。

*@returnURL 所代表远程资源的响应结果*/

public staticString sendGet(String url, String param) {

String result= "";

BufferedReader in= null;try{

String urlNameString= url + "?" +param;

URL realUrl= newURL(urlNameString);//打开和URL之间的连接

HttpURLConnection connection =(HttpURLConnection) realUrl

.openConnection();//设置通用的请求属性

connection.setRequestProperty("accept", "*/*");

connection.setRequestProperty("connection", "Keep-Alive");

connection.setRequestProperty("user-agent","Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");//建立实际的连接

connection.connect();//获取所有响应头字段

Map> map =connection.getHeaderFields();//遍历所有的响应头字段//for (String key : map.keySet()) {//System.out.println(key + "--->" + map.get(key));//}//定义 BufferedReader输入流来读取URL的响应

in = new BufferedReader(newInputStreamReader(

connection.getInputStream(),"utf-8"));

String line;while ((line = in.readLine()) != null) {

result+=line;

}

}catch(Exception e) {

System.out.println("发送GET请求出现异常!" +e);

e.printStackTrace();

}//使用finally块来关闭输入流

finally{try{if (in != null) {

in.close();

}

}catch(Exception e2) {

e2.printStackTrace();

}

}returnresult;

}/*** 向指定 URL 发送POST方法的请求

*

*@paramurl

* 发送请求的 URL

*@paramparam

* 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。

*@return所代表远程资源的响应结果*/

public staticString sendPost(String url, String param) {

PrintWriter out= null;

BufferedReader in= null;

String result= "";try{

URL realUrl= newURL(url);//打开和URL之间的连接

HttpURLConnection conn =(HttpURLConnection) realUrl

.openConnection();//设置通用的请求属性

conn.setRequestProperty("accept", "*/*");

conn.setRequestProperty("connection", "Keep-Alive");

conn.setRequestProperty("user-agent","Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");//发送POST请求必须设置如下两行

conn.setDoOutput(true);

conn.setDoInput(true);//获取URLConnection对象对应的输出流//out = new PrintWriter(conn.getOutputStream());// //发送请求参数//out.print(param);// //flush输出流的缓冲//out.flush();//定义BufferedReader输入流来读取URL的响应

in = new BufferedReader(newInputStreamReader(

conn.getInputStream(),"utf-8"));

String line;while ((line = in.readLine()) != null) {

result+=line;

}

}catch(Exception e) {

System.out.println("发送 POST 请求出现异常!" +e);

e.printStackTrace();

}//使用finally块来关闭输出流、输入流

finally{try{if (out != null) {

out.close();

}if (in != null) {

in.close();

}

}catch(IOException ex) {

ex.printStackTrace();

}

}returnresult;

}/*** 向指定 URL 发送POST方法的请求

*

*@paramurl

* 发送请求的 URL

*@paramparams

* 请求的参数集合

*@return远程资源的响应结果*/

public static String sendPost(String url, Mapparams) {

OutputStreamWriter out= null;

BufferedReader in= null;

StringBuilder result= newStringBuilder();try{

URL realUrl= newURL(url);

HttpURLConnection conn=(HttpURLConnection) realUrl

.openConnection();//发送POST请求必须设置如下两行

conn.setDoOutput(true);

conn.setDoInput(true);//POST方法

conn.setRequestMethod("POST");//设置通用的请求属性

conn.setRequestProperty("accept", "*/*");

conn.setRequestProperty("connection", "Keep-Alive");

conn.setRequestProperty("user-agent","Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");

conn.setRequestProperty("Content-Type","application/x-www-form-urlencoded");

conn.connect();//获取URLConnection对象对应的输出流

out = new OutputStreamWriter(conn.getOutputStream(), "UTF-8");//发送请求参数

if (params != null) {

StringBuilder param= newStringBuilder();for (Map.Entryentry : params.entrySet()) {if (param.length() > 0) {

param.append("&");

}

param.append(entry.getKey());

param.append("=");

param.append(entry.getValue());//System.out.println(entry.getKey()+":"+entry.getValue());

}

System.out.println("param:" +param.toString());

out.write(param.toString());

}//flush输出流的缓冲

out.flush();//定义BufferedReader输入流来读取URL的响应

in = new BufferedReader(newInputStreamReader(

conn.getInputStream(),"UTF-8"));

String line;while ((line = in.readLine()) != null) {

result.append(line);

}

}catch(Exception e) {

e.printStackTrace();

}//使用finally块来关闭输出流、输入流

finally{try{if (out != null) {

out.close();

}if (in != null) {

in.close();

}

}catch(IOException ex) {

ex.printStackTrace();

}

}returnresult.toString();

}/*** url编码

*

*@paramstr

*@paramcharset

*@return*@throwsUnsupportedEncodingException*/

public staticString urlEncoder(String str, String charset)throwsUnsupportedEncodingException {if (str == null) {

str= "";

}

String result=URLEncoder.encode(str, charset);returnresult;

}/*** 发送https请求

*

*@paramrequestUrl

* 请求地址

*@paramrequestMethod

* 请求方式(GET、POST)

*@paramoutputStr

* 提交的数据

*@return返回微信服务器响应的信息*/

public staticString httpsRequest(String requestUrl, String requestMethod,

String outputStr) {try{//创建SSLContext对象,并使用我们指定的信任管理器初始化

TrustManager[] tm = { newMyX509TrustManager() };

SSLContext sslContext= SSLContext.getInstance("SSL", "SunJSSE");

sslContext.init(null, tm, newjava.security.SecureRandom());//从上述SSLContext对象中得到SSLSocketFactory对象

SSLSocketFactory ssf =sslContext.getSocketFactory();

URL url= newURL(requestUrl);

HttpsURLConnection conn=(HttpsURLConnection) url.openConnection();

conn.setSSLSocketFactory(ssf);

conn.setDoOutput(true);

conn.setDoInput(true);

conn.setUseCaches(false);//设置请求方式(GET/POST)

conn.setRequestMethod(requestMethod);

conn.setRequestProperty("content-type","application/x-www-form-urlencoded");//当outputStr不为null时向输出流写数据

if (null !=outputStr) {

OutputStream outputStream=conn.getOutputStream();//注意编码格式

outputStream.write(outputStr.getBytes("UTF-8"));

outputStream.close();

}//从输入流读取返回内容

InputStream inputStream =conn.getInputStream();

InputStreamReader inputStreamReader= newInputStreamReader(

inputStream,"utf-8");

BufferedReader bufferedReader= newBufferedReader(

inputStreamReader);

String str= null;

StringBuffer buffer= newStringBuffer();while ((str = bufferedReader.readLine()) != null) {

buffer.append(str);

}//释放资源

bufferedReader.close();

inputStreamReader.close();

inputStream.close();

inputStream= null;

conn.disconnect();returnbuffer.toString();

}catch(ConnectException ce) {

ce.printStackTrace();

}catch(Exception e) {

e.printStackTrace();

}return null;

}

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值