Java 实现Https访问工具类 跳过ssl证书验证
不多BB ,代码直接粘贴可用
import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLSession;
import com.alibaba.fastjson.JSONObject; /**
* Http请求
* @author mszhou
*
*/
public class HttpsUtils {
private static final int TIMEOUT = 45000;
public static final String ENCODING = "UTF-8"; /**
* 创建HTTP连接
*
* @param url
* 地址
* @param method
* 方法
* @param headerParameters
* 头信息
* @param body
* 请求内容
* @return
* @throws Exception
*/
private static HttpURLConnection createConnection(String url,
String method, Map<String, String> headerParameters, String body)
throws Exception {
URL Url = new URL(url);
trustAllHttpsCertificates();
HttpURLConnection httpConnection = (HttpURLConnection) Url
.openConnection();
// 设置请求时间
httpConnection.setConnectTimeout(TIMEOUT);
// 设置 header
if (headerParameters != null) {
Iterator<String> iteratorHeader = headerParameters.keySet()
.iterator();
while (iteratorHeader.hasNext()) {
String key = iteratorHeader.next();
httpConnection.setRequestProperty(key,
headerParameters.get(key));
}
}
httpConnection.setRequestProperty("Content-Type",
"application/x-www-form-urlencoded;charset=" + ENCODING); // 设置请求方法
httpConnection.setRequestMethod(method);
httpConnection.setDoOutput(true);
httpConnection.setDoInput(true);
// 写query数据流
if (!(body == null || body.trim().equals(""))) {
OutputStream writer = httpConnection.getOutputStream();
try {
writer.write(body.getBytes(ENCODING));
} finally {
if (writer != null) {
writer.flush();
writer.close();
}
}
} // 请求结果
int responseCode = httpConnection.getResponseCode();
if (responseCode != 200) {
throw new Exception(responseCode
+ ":"
+ inputStream2String(httpConnection.getErrorStream(),
ENCODING));
} return httpConnection;
} /**
* POST请求
* @param address 请求地址
* @param headerParameters 参数
* @param body
* @return
* @throws Exception
*/
public static String post(String address,
Map<String, String> headerParameters, String body) throws Exception { return proxyHttpRequest(address, "POST", null,
getRequestBody(headerParameters));
} /**
* GET请求
* @param address
* @param headerParameters
* @param body
* @return
* @throws Exception
*/
public static String get(String address,
Map<String, String> headerParameters, String body) throws Exception { return proxyHttpRequest(address + "?"
+ getRequestBody(headerParameters), "GET", null, null);
} /**
* 读取网络文件
* @param address
* @param headerParameters
* @param body
* @param file
* @return
* @throws Exception
*/
public static String getFile(String address,
Map<String, String> headerParameters, File file) throws Exception {
String result = "fail"; HttpURLConnection httpConnection = null;
try {
httpConnection = createConnection(address, "POST", null,
getRequestBody(headerParameters));
result = readInputStream(httpConnection.getInputStream(), file); } catch (Exception e) {
throw e;
} finally {
if (httpConnection != null) {
httpConnection.disconnect();
} } return result;
} public static byte[] getFileByte(String address,
Map<String, String> headerParameters) throws Exception {
byte[] result = null; HttpURLConnection httpConnection = null;
try {
httpConnection = createConnection(address, "POST", null,
getRequestBody(headerParameters));
result = readInputStreamToByte(httpConnection.getInputStream()); } catch (Exception e) {
throw e;
} finally {
if (httpConnection != null) {
httpConnection.disconnect();
} } return result;
} /**
* 读取文件流
* @param in
* @return
* @throws Exception
*/
public static String readInputStream(InputStream in, File file)
throws Exception {
FileOutputStream out = null;
ByteArrayOutputStream output = null; try {
output = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len = 0;
while ((len = in.read(buffer)) != -1) {
output.write(buffer, 0, len);
} out = new FileOutputStream(file);
out.write(output.toByteArray()); } catch (Exception e) {
throw e;
} finally {
if (output != null) {
output.close();
}
if (out != null) {
out.close();
}
}
return "success";
} public static byte[] readInputStreamToByte(InputStream in) throws Exception {
FileOutputStream out = null;
ByteArrayOutputStream output = null;
byte[] byteFile = null; try {
output = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len = 0;
while ((len = in.read(buffer)) != -1) {
output.write(buffer, 0, len);
}
byteFile = output.toByteArray();
} catch (Exception e) {
throw e;
} finally {
if (output != null) {
output.close();
}
if (out != null) {
out.close();
}
} return byteFile;
} /**
* HTTP请求
*
* @param address
* 地址
* @param method
* 方法
* @param headerParameters
* 头信息
* @param body
* 请求内容
* @return
* @throws Exception
*/
public static String proxyHttpRequest(String address, String method,
Map<String, String> headerParameters, String body) throws Exception {
String result = null;
HttpURLConnection httpConnection = null; try {
httpConnection = createConnection(address, method,
headerParameters, body); String encoding = "UTF-8";
if (httpConnection.getContentType() != null
&& httpConnection.getContentType().indexOf("charset=") >= 0) {
encoding = httpConnection.getContentType()
.substring(
httpConnection.getContentType().indexOf(
"charset=") + 8);
}
result = inputStream2String(httpConnection.getInputStream(),
encoding);
// logger.info("HTTPproxy response: {},{}", address,
// result.toString()); } catch (Exception e) {
// logger.info("HTTPproxy error: {}", e.getMessage());
throw e;
} finally {
if (httpConnection != null) {
httpConnection.disconnect();
}
}
return result;
} /**
* 将参数化为 body
* @param params
* @return
*/
public static String getRequestBody(Map<String, String> params) {
return getRequestBody(params, true);
} /**
* 将参数化为 body
* @param params
* @return
*/
public static String getRequestBody(Map<String, String> params,
boolean urlEncode) {
StringBuilder body = new StringBuilder(); Iterator<String> iteratorHeader = params.keySet().iterator();
while (iteratorHeader.hasNext()) {
String key = iteratorHeader.next();
String value = params.get(key); if (urlEncode) {
try {
body.append(key + "=" + URLEncoder.encode(value, ENCODING)
+ "&");
} catch (UnsupportedEncodingException e) {
// e.printStackTrace();
}
} else {
body.append(key + "=" + value + "&");
}
} if (body.length() == 0) {
return "";
}
return body.substring(0, body.length() - 1);
} /**
* 读取inputStream 到 string
* @param input
* @param encoding
* @return
* @throws IOException
*/
private static String inputStream2String(InputStream input, String encoding)
throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(input,
encoding));
StringBuilder result = new StringBuilder();
String temp = null;
while ((temp = reader.readLine()) != null) {
result.append(temp);
} return result.toString(); } /**
* 设置 https 请求
* @throws Exception
*/
private static void trustAllHttpsCertificates() throws Exception {
HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() {
public boolean verify(String str, SSLSession session) {
return true;
}
});
javax.net.ssl.TrustManager[] trustAllCerts = new javax.net.ssl.TrustManager[1];
javax.net.ssl.TrustManager tm = new miTM();
trustAllCerts[0] = tm;
javax.net.ssl.SSLContext sc = javax.net.ssl.SSLContext
.getInstance("SSL");
sc.init(null, trustAllCerts, null);
javax.net.ssl.HttpsURLConnection.setDefaultSSLSocketFactory(sc
.getSocketFactory());
} //设置 https 请求证书
static class miTM implements javax.net.ssl.TrustManager,javax.net.ssl.X509TrustManager { public java.security.cert.X509Certificate[] getAcceptedIssuers() {
return null;
} public boolean isServerTrusted(
java.security.cert.X509Certificate[] certs) {
return true;
} public boolean isClientTrusted(
java.security.cert.X509Certificate[] certs) {
return true;
} public void checkServerTrusted(
java.security.cert.X509Certificate[] certs, String authType)
throws java.security.cert.CertificateException {
return;
} public void checkClientTrusted(
java.security.cert.X509Certificate[] certs, String authType)
throws java.security.cert.CertificateException {
return;
} } //====================================================================
//============================= 测试调用 ============================
//====================================================================
public static void main(String[] args) { try { //请求地址(我这里测试使用淘宝提供的手机号码信息查询的接口)
String address = "https://192.168.13.81:8443/hound-api/api/v1/acc/auth/api/elastic/save_indexName"; //请求参数
Map<String, String> params = new HashMap<String, String>();
params.put("indexName", "ppppsss");//这是该接口需要的参数
params.put("userId", "317");//这是该接口需要的参数 // 调用 get 请求
String res = get(address, params, null);
System.out.println(res);//打印返回参数 res = res.substring(res.indexOf("{"));//截取
JSONObject result = JSONObject.parseObject(res);//转JSON System.out.println(result.toString());//打印 } catch (Exception e) {
// TODO 异常
e.printStackTrace();
} } }
Java 实现Https访问工具类 跳过ssl证书验证的更多相关文章
- linux 测试 get 请求 跳过SSL证书验证
Linux 下测试 get 请求: curl : curl "http://www.qq.com" # 标准输出页面内容 curl -i "http://www.qq.c ...
- Java 发送 Https 请求工具类 (兼容http)
依赖 jsoup-1.11.3.jar <dependency> <groupId>org.jsoup</groupId> <artifactId>js ...
- Rhino+envjs-1.2.js 在java运行网站js 工具类
java爬虫遇到个页面加密的东西,找了些资料学习学习 做了个java运行js的工具类,希望对大家有用,其中用到client(获取js)可以自行换成自己的client.主要是用了 Rhino就是Java ...
- HttpClient4.5 SSL访问工具类
要从网上找一个HttpClient SSL访问工具类太难了,原因是HttpClient版本太多了,稍有差别就不能用,最后笔者干脆自己封装了一个访问HTTPS并绕过证书工具类. 主要是基于新版本Http ...
- 我的Android进阶之旅------>Android关于HttpsURLConnection一个忽略Https证书是否正确的Https请求工具类
下面是一个Android HttpsURLConnection忽略Https证书是否正确的Https请求工具类,不需要验证服务器端证书是否正确,也不需要验证服务器证书中的域名是否有效. (PS:建议下 ...
- Https通信工具类
记录一个在微信开发中用到的https通信工具类,以后会用到的. 用于https通信的证书信任管理器 import java.security.cert.CertificateException; im ...
- Java线程的并发工具类
Java线程的并发工具类. 一.fork/join 1. Fork-Join原理 在必要的情况下,将一个大任务,拆分(fork)成若干个小任务,然后再将一个个小任务的结果进行汇总(join). 适用场 ...
- Http、Https请求工具类
最近在做微信开发,使用http调用第三方服务API,有些是需要https协议,通过资料和自己编码,写了个支持http和https的工具类,经验证可用,现贴出来保留,也供需要的人使用(有不足的地方,也请 ...
- 微信https请求工具类
工作中用到的微信https请求工具类. package com.gxgrh.wechat.tools; import com.gxgrh.wechat.wechatapi.service.System ...
随机推荐
- StringBuilder类练习
1 package cn.itcast.p2.stringbuffer.demo; 2 3 public class StringBuilderTest { 4 public static void ...
- xargs、管道、exec区别
作者:ilexwg链接:https://www.zhihu.com/question/27452459/answer/170834758来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转 ...
- SourceGenerator的应用: .Net多进程开发库 - Juxtapose
背景 进程间通讯属于老生常谈的话题,可能已经有很多的通信示例代码,但在实际使用中需要做的东西还比较多.例如协议定制.消息收发.进程管理等都需要实现,进阶需求可能还需要实现回调函数.取消等. 个人在工作 ...
- 字节Android Native Crash治理之Memory Corruption工具原理与实践
作者:字节跳动终端技术--庞翔宇 内容摘要 MemCorruption工具是字节跳动AppHealth (Client Infrastructure - AppHealth) 团队开发的一款用于定 ...
- ajaxl利用json 传送数据的 三种提交方式?
一.在servlet类中添加几个javabean对象,放置数据. package com.aaa.servlet; import java.io.IOException; import java.ut ...
- APC 篇——初识 APC
写在前面 此系列是本人一个字一个字码出来的,包括示例和实验截图.由于系统内核的复杂性,故可能有错误或者不全面的地方,如有错误,欢迎批评指正,本教程将会长期更新. 如有好的建议,欢迎反馈.码字不易, ...
- 回顾 2021 中国 .NET 开发者峰会
.NET Conf China 2021 是面向开发人员的社区峰会,基于 .NET Conf 2021,庆祝 .NET 6 的发布和回顾过去一年来 .NET 在中国的发展.峰会由来自北京.上海.苏州. ...
- Lesson1——NumPy NumPy 安装
NumPy 教程目录 NumPy 安装 Python 官网上的发行版是不包含 NumPy 模块的.(pip list 测试一下) 我们可以使用以下几种方法来安装. 1 使用已有的发行版本 对于许多用户 ...
- JVM学习九-(复习)HotSpot 垃圾收集器
HotSpot 虚拟机提供了多种垃圾收集器,每种收集器都有各自的特点,虽然我们要对各个收集器进行比较,但并非为了挑选出一个最好的收集器.我们选择的只是对具体应用最合适的收集器. 新生代垃圾收集器 Se ...
- java getSource()和 getActionCommand()区别
感谢大佬:https://blog.csdn.net/LIU_YANZHAO/article/details/72740011?utm_source=blogxgwz1 比如说 按纽的事件,同一个JF ...