1、昨儿晚上发布的时候,发现一直提示链接不上HTTPS的服务器,报了一个这个异常:javax.net.ssl.SSLException:,排除了服务器方面的问题,看看自己这儿出了什么毛病,尝试设置HttpsURLConnection.setDefaultHostnameVerifier()不成功,估计是org.apache.http有自己的一套SSL东西,修改org.apache.http的主机名验证解决问题。
增加则用的一行:
- SSLSocketFactory.getSocketFactory().setHostnameVerifier(new AllowAllHostnameVerifier());
- import org.apache.http.conn.ssl.AllowAllHostnameVerifier;
- import org.apache.http.conn.ssl.SSLSocketFactory;
另外如果你使用原始的URLConnect的话请这样设置一下:
- try {
- SSLContext sc = SSLContext.getInstance("TLS");
- sc.init(null, new TrustManager[] { new X509TrustManager() {
- @Override
- public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
- }
- @Override
- public void checkServerTrusted(X509Certificate[] chain, String authType)
- throws CertificateException {
- }
- @Override
- public X509Certificate[] getAcceptedIssuers() {
- return null;
- }
- } }, new SecureRandom());
- HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
- HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() {
- @Override
- public boolean verify(String arg0, SSLSession arg1) {
- return true;
- }
- });
- } catch (Exception e) {
- e.printStackTrace();
- }
之后就可以使用了:
- String https = "https://www.google.com.hk";
- try {
- HttpsURLConnection conn = (HttpsURLConnection) new URL(https).openConnection();
- conn.setDoOutput(true);
- conn.setDoInput(true);
- conn.connect();
- BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
- StringBuffer sb = new StringBuffer();
- String line;
- while ((line = br.readLine()) != null)
- sb.append(line);
- Log(sb.toString());
- } catch (Exception e) {
- e.printStackTrace();
- }
3、自己目前还是渣渣一枚啊.....