100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > Java网络连接之HttpURLConnection HttpsURLConnection

Java网络连接之HttpURLConnection HttpsURLConnection

时间:2020-03-12 05:11:33

相关推荐

Java网络连接之HttpURLConnection HttpsURLConnection

工具类包含两个方法: http请求、https请求

直接看代码:

package com.jtools;import java.io.BufferedReader;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStream;import .ConnectException;import .HttpURLConnection;import .URL;import .ssl.HttpsURLConnection;import .ssl.SSLContext;import .ssl.SSLSocketFactory;import .ssl.TrustManager;/*** http工具类* @author json_wang*/public class HttpUtil {/*** 发起http请求并获取结果* @param requestUrl 请求地址* @param requestMethod 请求方式(GET、POST)* @param outputStr 提交的数据 格式(例子:"name=name&age=age") // 正文,正文内容其实跟get的URL中 '? '后的参数字符串一致* @return json字符串(json格式不确定 可能是JSONObject,也可能是JSONArray,这里用字符串,在controller里再转化)*/public static String httpRequest(String requestUrl, String requestMethod, String outputStr) {String resultStr = "";StringBuffer buffer = new StringBuffer();try {URL url = new URL(requestUrl);HttpURLConnection httpUrlConn = (HttpURLConnection) url.openConnection();httpUrlConn.setDoOutput(true);httpUrlConn.setDoInput(true);httpUrlConn.setUseCaches(false);// 设置请求方式(GET/POST)httpUrlConn.setRequestMethod(requestMethod);//HttpURLConnection是基于HTTP协议的,其底层通过socket通信实现。如果不设置超时(timeout),在网络异常的情况下,可能会导致程序僵死而不继续往下执行httpUrlConn.setConnectTimeout(30*1000);//30s超时httpUrlConn.setReadTimeout(10*1000);//10s超时/*//设置请求属性 httpUrlConn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");httpUrlConn.setRequestProperty("Charset", "UTF-8");*///HttpURLConnection的connect()函数,实际上只是建立了一个与服务器的tcp连接,并没有实际发送http请求。//get方式需要显式连接if ("GET".equalsIgnoreCase(requestMethod)){httpUrlConn.connect();}//这种post方式,隐式自动连接// 当有数据需要提交时if (null != outputStr) {OutputStream outputStream = httpUrlConn.getOutputStream();// 注意编码格式,防止中文乱码outputStream.write(outputStr.getBytes("UTF-8"));outputStream.close();}// 将返回的输入流转换成字符串InputStream inputStream = httpUrlConn.getInputStream();InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "utf-8");BufferedReader bufferedReader = new BufferedReader(inputStreamReader);String str = null;while ((str = bufferedReader.readLine()) != null) {buffer.append(str);}bufferedReader.close();inputStreamReader.close();// 释放资源inputStream.close();inputStream = null;httpUrlConn.disconnect();resultStr = buffer.toString();} catch (ConnectException ce) {System.out.println("server connection timed out.");} catch (Exception e) {System.out.println(requestUrl+" request error:\n"+e);}return resultStr;}/*** 发起https请求并获取结果* * @param requestUrl 请求地址* @param requestMethod 请求方式(GET、POST)* @param outputStr 提交的数据 格式(例子:"name=name&age=age") // 正文,正文内容其实跟get的URL中 '? '后的参数字符串一致* @return json字符串(json格式不确定 可能是JSONObject,也可能是JSONArray,这里用字符串,在controller里再转化)*/public static String httpsRequest(String requestUrl, String requestMethod, String outputStr) {String resultStr = "";StringBuffer buffer = new StringBuffer();try {// 创建SSLContext对象,并使用我们指定的信任管理器初始化TrustManager[] tm = { new MyX509TrustManager() };SSLContext sslContext = SSLContext.getInstance("SSL", "SunJSSE");sslContext.init(null, tm, new java.security.SecureRandom());// 从上述SSLContext对象中得到SSLSocketFactory对象SSLSocketFactory ssf = sslContext.getSocketFactory();URL url = new URL(requestUrl);HttpsURLConnection httpUrlConn = (HttpsURLConnection) url.openConnection();httpUrlConn.setSSLSocketFactory(ssf);httpUrlConn.setDoOutput(true);httpUrlConn.setDoInput(true);httpUrlConn.setUseCaches(false);// 设置请求方式(GET/POST)httpUrlConn.setRequestMethod(requestMethod);//HttpURLConnection是基于HTTP协议的,其底层通过socket通信实现。如果不设置超时(timeout),在网络异常的情况下,可能会导致程序僵死而不继续往下执行httpUrlConn.setConnectTimeout(30*1000);//30s超时httpUrlConn.setReadTimeout(10*1000);//10s超时/*//设置请求属性 httpUrlConn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");httpUrlConn.setRequestProperty("Charset", "UTF-8");*///HttpURLConnection的connect()函数,实际上只是建立了一个与服务器的tcp连接,并没有实际发送http请求。//get方式需要显式连接if ("GET".equalsIgnoreCase(requestMethod)){httpUrlConn.connect();}//这种post方式,隐式自动连接// 当有数据需要提交时if (null != outputStr) {OutputStream outputStream = httpUrlConn.getOutputStream();// 注意编码格式,防止中文乱码outputStream.write(outputStr.getBytes("UTF-8"));outputStream.close();}// 将返回的输入流转换成字符串InputStream inputStream = httpUrlConn.getInputStream();InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "utf-8");BufferedReader bufferedReader = new BufferedReader(inputStreamReader);String str = null;while ((str = bufferedReader.readLine()) != null) {buffer.append(str);}bufferedReader.close();inputStreamReader.close();// 释放资源inputStream.close();inputStream = null;httpUrlConn.disconnect();resultStr = buffer.toString();} catch (ConnectException ce) {System.out.println("server connection timed out.");} catch (Exception e) {System.out.println(requestUrl+" request error:\n"+e);}return resultStr;}public static void main(String[] args) {System.out.println(httpRequest("/", "GET", null));}}

辅助类:

package com.jtools;import java.security.cert.CertificateException;import java.security.cert.X509Certificate;import .ssl.X509TrustManager;/*** 证书信任管理器(用于https请求)*/public class MyX509TrustManager implements X509TrustManager {public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {}public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {}public X509Certificate[] getAcceptedIssuers() {return null;}}

附:源代码:/JsonShare/JTools

PS:Java网络连接之HttpURLConnection与HttpClient 区别及联系/wszxl492719760/article/details/8522714

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。