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 ...
随机推荐
- 为什么ConcurrentHashMap是线程安全的?
ConcurrentHashMap 是 HashMap 的多线程版本,HashMap 在并发操作时会有各种问题,比如死循环问题.数据覆盖等问题.而这些问题,只要使用 ConcurrentHashMap ...
- mysql加强(4)~多表查询
mysql加强(4)~多表查询:笛卡尔积.消除笛卡尔积操作(等值.非等值连接),内连接(隐式连接.显示连接).外连接.自连接 一.笛卡尔积 1.什么是笛卡尔积: 数学上,有两个集合A={a,b},B= ...
- HTML 基础1
HTML 超文本标记语言 文件后缀html,htm 标签成对出现:开始标签--结束标签 元素内容位于开始标签--结束标签之间(可以有空内容) 空元素<a/> 大小写不敏感 元素,属性 &l ...
- 论新手该如何学习java?
由于我国高等教育制度教材陈旧,加上java自身发展不过十年左右的时间,还有一个很重要的原因就是java这门语言更适合商业应用,所以高校里大部分博士老师们对此语言的了解甚至不比本科生多. 在这种环境下, ...
- 导出SQL语句
转载请注明来源:https://www.cnblogs.com/hookjc/ if(!($db_conn=mysql_connect($db_server,$db_name,$db_pass))){ ...
- Ubuntu下Java JDK安装
1.仓库安装 待更新 2.手动安装 1.下载linux平台sdk. 官网:https://www.oracle.com/technetwork/java/javase/downloads/index. ...
- 基于Apache的Tomcat负载均衡和集群(2)
反向代理负载均衡 (Apache+JK+Tomcat) 使用代理服务器可以将请求转发给内部的Web服务器,让代理服务器将请求均匀地转发给多台内部Web服务器之一上,从而达到负载均衡的目的.这种代理方式 ...
- MySQL 数据库SQL语句——高阶版本2
MySQL 数据库SQL语句--高阶版本2 实验准备 数据库表配置: mysql -uroot -p show databases; create database train_ticket; use ...
- 【AGC035D】Add and Remove(脑洞 DP 分治)
题目链接 大意 给出\(N\)个数的序列,每次操作可以选择连续的三个数,将中间的那个数抽出,将另外两个数的数值加上中间那个数的数值. 一直执行以上操作直到只剩最后两个数,求最后两个数的所有可能的和的最 ...
- maven下使用jstl标签(1.2)版本
使用的是1.2版本的,只需要一个jstl-1.2.jar jsp中头部加入<%@ taglib prefix="c" uri="http://java.sun ...