您的位置:首页 > 理论基础 > 计算机网络

java 访问https 遇到的问题

2012-08-07 16:05 537 查看
    用java访问https 类的url是,该类url需要验证一般会报 验证之类的错误导致无法访问。

有两种解决方法。

    (1)用HttpsURLConnection

 

URL url = new URL(urlStr);

   

 HttpsURLConnection conn =  (HttpsURLConnection) url.openConnection();

HostnameVerifier hv = new HostnameVerifier() {

    public boolean verify(String arg0, SSLSession session) {

     Logger.debug(RemittanceManagerImpl.class,

       "Hostname Verifier... ");

     return true;

    }

   };

   conn.setHostnameVerifier(hv);

加上这一段之后,就不报错了。

 

(2) 用httpClient

HttpClient httpClient = new DefaultHttpClient(httpParameters);

  httpClient = wrapClient(httpClient);

  HttpResponse httpResponse = httpClient.execute(httpPost);

 

//写一个方法将原来的HttpClient 修饰一下,即可

private HttpClient wrapClient(HttpClient base) {

  try {

   SSLContext ctx = SSLContext.getInstance("TLS");

   X509TrustManager tm = new X509TrustManager() {

    public void checkClientTrusted(

      java.security.cert.X509Certificate[] arg0, String arg1)

      throws java.security.cert.CertificateException {

    }

    public void checkServerTrusted(

      java.security.cert.X509Certificate[] arg0, String arg1)

      throws java.security.cert.CertificateException {

    }

    public X509Certificate[] getAcceptedIssuers() {

     return null;

    }

   };

   ctx.init(null, new TrustManager[] { tm }, null);

   SSLSocketFactory ssf = new SSLSocketFactory(ctx);

   ssf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);

   ClientConnectionManager ccm = base.getConnectionManager();

   SchemeRegistry sr = ccm.getSchemeRegistry();

   sr.register(new Scheme("https", ssf, 443));

   return new DefaultHttpClient(ccm, base.getParams());

  } catch (Exception ex) {

   ex.printStackTrace();

   return null;

  }

 }

这样也就能正常访问了。

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息