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

直接看代码:

package com.jtools;import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.ConnectException;
import java.net.HttpURLConnection;
import java.net.URL;import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSocketFactory;
import javax.net.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("https://www.zhihu.com/", "GET", null));}}

辅助类:

package com.jtools;import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;import javax.net.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;}
}

附:源代码:https://github.com/JsonShare/JTools

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

转载于:https://www.cnblogs.com/JsonShare/p/7159729.html

Java网络连接之HttpURLConnection、HttpsURLConnection相关推荐

  1. Andirod——网络连接(HttpURLConnection)

    Android中使用HTTP协议访问网络的方法主要分为两种: 使用HttpURLConnection 使用HttpClient 本文主要内容是HttpURLConnection的使用. HttpURL ...

  2. java 打开url连接访问不了,android 应用Java自带的HttpURLConnection 连接网络 读取返回数据...

    android 使用Java自带的HttpURLConnection 连接网络 读取返回数据 @Override protected void onCreate(Bundle savedInstanc ...

  3. 使用java检测网络连接状况

    windows中可以通过在cmd中使用ping命令来检测网络连接状况,如下: 网络连接正常时: 网络未连接时: 在java中可以通过调用ping命令来判断网络是否连接正常: ? 1 2 3 4 5 6 ...

  4. 指定应用程序网络连接_总结Java开发Web应用程序应该理解的几个知识点

    前言 前面我们对Web应用开发的底层技术做了一些串联,也就是从应用程序的本质出发来理解为什么我们的应用程序架构的演变. 特别是Spring框架的出现,它在Web应用开发中扮演的角色,特别是Servle ...

  5. JAVA网络编程Socket常见问题 【长连接专题】

    一. 网络程序运行过程中的常见异常及处理 第1个异常是 java.net.BindException:Address already in use: JVM_Bind. 该异常发生在服务器端进行new ...

  6. java简单检测ping值的工具,可监测指定进程的网络连接ping值和指定IP的ping值

    此工具一开始是为了计算<剑灵>台服的延迟而写的,后来添加了一些功能,可以检测任何进程的网络连接的ping值,也可以检测指定IP的ping值. 先上图: 上面是游戏中的效果,右上角的黄色即为 ...

  7. 服务器网络连接状态监测可视化呈现(Java+leaflet)

    最近开发遇到一个需要网络检测的场景,具体是需要实时(或者近乎实时吧)的监测本级单位与下级单位的网络连通情况并做可视化呈现,所以想到在服务器开一个定时任务,每隔一段时间就去轮询一遍各单位服务器的连通状态 ...

  8. java 检测网络连接,使用java检测网络连接情况

    使用java检测网络连接状况 windows中可以通过在cmd中使用ping命令来检测网络连接状况,如下: 网络连接正常时: 网络未连接时: 在java中可以通过调用ping命令来判断网络是否连接正常 ...

  9. java监听网络连接_Android RxJava 之网络链接监听示范

    RxJava在stream events处理上真的是一个利器.下面的示范代码显示如何用它来监听android设备的网络连接状况,实时接收change信息. IntentFilter filter = ...

最新文章

  1. delphi 10 seattle 中 解决IOS 9 限制使用HTTP 服务问题
  2. HTML-CSS-JS-PHP的顺序及相关网址(转)
  3. 2019,从刷新你的运营知识库开始!
  4. 函数最值题目及答案_呆哥数学每日一题 ——多元函数求最值
  5. GRIDVIEW多行多列合并单元格(合并列)
  6. 微信小程序通用功能设计和实现
  7. 【Java基础学习笔记】- Day11 - 第四章 引用类型用法总结
  8. 安卓雷曼大冒险一直连接服务器,雷曼大冒险连接不到服务器是什么原因?网络连接失败的原因和解决办法[图]...
  9. 简单干净的C#方法设计案例:SFCUI.AjaxValue()之二
  10. IT兄弟连 JavaWeb教程 Servlet线程安全问题
  11. 利用神经网络内部表征可视化class-specific image regions区域
  12. 模板题——KMP Trie树 并查集
  13. Typora数学公式大全
  14. 富文本编辑器开发系列-1-基础概念
  15. 【ROS】中级操作学习整理-TF坐标变换
  16. hbuilder_工具的服务端口已关闭。要使用命令行调用工具,请在下方输入 y 以确认开启,或手动打开工具 -> 设置 -> 安全设置,将服务端口开启。
  17. 隆重推荐:吴闲云 - 煮酒探西游
  18. 新茶饮的尽头是瓶装水?
  19. Chibi Dinos上线薄饼IFO打新,是否值得参与?
  20. java程序模拟手机

热门文章

  1. [hadoop新实战4]hadoop完全分布式安装序列(支持ubuntu和redhat)
  2. cisco 基础配置命令中文解析 1
  3. 【转】C#的内存管理:堆栈、托管堆与指针
  4. 开源框架 Drupal 修复多个访问绕过和 CSRF 漏洞
  5. 思科修复运营商级路由器中的两个已遭利用漏洞
  6. 多款 D-Link 路由器受多个 RCE 漏洞影响
  7. 我摸鱼写的Java片段意外称霸Stack Overflow十年、征服6000多GitHub开源项目: 有bug!...
  8. 前端:高德地图快速入门使用
  9. centos6.5编译安装zabbix2.4及微信企业号告警
  10. UEditor应用 —— 图片上传