package cn.fg.task;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URL;
import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSession;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
public class HttpsUtil {
public static String get(String url,boolean ignoreSSL) {
return connection(url, "GET", null, null,ignoreSSL);
}
public static String post(String url, String data, String contentType, boolean ignoreSSL) {
return connection(url, "POST", data, contentType, ignoreSSL);
}
public static String connection(String url,String method,String data,String contentType,boolean ignoreSSL){
HttpsURLConnection connection = null;
try {
URL _url = new URL(url);
connection = (HttpsURLConnection) _url.openConnection();
connection.setRequestMethod(method);
connection.setDoOutput(true);
connection.setDoInput(true);
connection.setUseCaches(false);
if(contentType != null){
connection.setRequestProperty("Content-Type", contentType);
}
if(ignoreSSL){
//信任所有ssl证书和主机
TrustManager[] trustManagers = {new HttpsTrustManager()};
SSLContext context = SSLContext.getInstance("TLS");
context.init(null, trustManagers, new SecureRandom());
connection.setSSLSocketFactory(context.getSocketFactory());
connection.setHostnameVerifier(new HostnameVerifier() {
@Override
public boolean verify(String hostname, SSLSession session) {
return true;
}
});
}
connection.connect();
if(data != null){
OutputStream outputStream = connection.getOutputStream();
outputStream.write(data.getBytes("utf-8"));
outputStream.close();
}
int responseCode = connection.getResponseCode();
if (responseCode == HttpsURLConnection.HTTP_OK) {
InputStream is = connection.getInputStream();
byte[] b = new byte[4096];
ByteArrayOutputStream baos = new ByteArrayOutputStream(b.length);
int len;
while ((len = is.read(b)) != -1) {
baos.write(b, 0, len);
}
is.close();
return baos.toString("utf-8");
}
return connection.getResponseMessage();
} catch (Exception e) {
e.printStackTrace();
} finally {
if(connection != null){
connection.disconnect();
}
}
return null;
}
public static void main(String[] args) {
//局部信任所有证书和主机
String result = HttpsUtil.get("https://127.0.0.1:8443/ssl-test/test01.do",true);
System.out.println(result);
//外部信任所有证书和主机
HttpsTrustManager.allowAllSSL();
String response = HttpsUtil.get("https://127.0.0.1:8443/ssl-test/test01.do", false);
System.out.println(result);
}
}
class HttpsTrustManager implements X509TrustManager {
private static TrustManager[] trustManagers = {new HttpsTrustManager()};
@Override
public void checkClientTrusted(X509Certificate[] arg0, String arg1) throws CertificateException {
// TODO Auto-generated method stub
}
@Override
public void checkServerTrusted(X509Certificate[] arg0, String arg1) throws CertificateException {
// TODO Auto-generated method stub
}
@Override
public X509Certificate[] getAcceptedIssuers() {
// TODO Auto-generated method stub
return null;
}
public static void allowAllSSL() {
try {
SSLContext context = SSLContext.getInstance("TLS");
context.init(null, trustManagers, new SecureRandom());
HttpsURLConnection.setDefaultSSLSocketFactory(context.getSocketFactory());
HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() {
@Override
public boolean verify(String hostname, SSLSession session) {
return true;
}
});
} catch (NoSuchAlgorithmException | KeyManagementException e) {
e.printStackTrace();
}
}
}
使用HttpsURLConnection发送Https请求
最新推荐文章于 2022-05-23 09:19:13 发布