Java的HttpClient如何去支持无证书访问https

 我来答
dgqjava
推荐于2016-09-24 · TA获得超过265个赞
知道小有建树答主
回答量:147
采纳率:100%
帮助的人:58万
展开全部

不用httpclient, 用jdk的api就可以写

import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;

import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLSession;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;

public class HttpUtil {

public static void main(String[] args) throws Exception {
}

public static String getToUrl(String url, String charset) throws Exception {
HostnameVerifier hv = new HostnameVerifier() {
public boolean verify(String urlHostName, SSLSession session) {
return true;
}
};

javax.net.ssl.TrustManager[] trustAllCerts = new javax.net.ssl.TrustManager[1];
javax.net.ssl.TrustManager tm = new MyM();
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());

HttpsURLConnection.setDefaultHostnameVerifier(hv);

HttpURLConnection connection = (HttpURLConnection) new URL(url).openConnection();
connection.setDoInput(true);
connection.setRequestMethod("GET");
connection.setUseCaches(false);
connection.setInstanceFollowRedirects(true);
connection.connect();

InputStream response = connection.getInputStream();
ByteArrayOutputStream result = new ByteArrayOutputStream();
byte[] data = new byte[10240];
int count = -1;
while (-1 != (count = response.read(data, 0, data.length))) {
result.write(data, 0, count);
}

connection.disconnect();

return new String(result.toByteArray(), charset);
}

static class MyM implements TrustManager, X509TrustManager {

public void checkClientTrusted(java.security.cert.X509Certificate[] chain, String authType) throws java.security.cert.CertificateException {

}

public void checkServerTrusted(java.security.cert.X509Certificate[] chain, String authType) throws java.security.cert.CertificateException {

}

public java.security.cert.X509Certificate[] getAcceptedIssuers() {
return null;
}
}

}
zhoudha
生活家

2015-01-30 · 知世故而不世故地生活
知道大有可为答主
回答量:2.4万
采纳率:91%
帮助的人:70万
展开全部
在服务器站点设置里,将SSL设置为忽略。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式