zoukankan      html  css  js  c++  java
  • Android 实现 HttpClient 请求Https

     

    如题,默认下,HttpClient是不能请求Https的,需要自己获取


    1. private static final int SET_CONNECTION_TIMEOUT = 5 * 1000;  
    2.     private static final int SET_SOCKET_TIMEOUT = 20 * 1000;  
    3.       
    4.     public static HttpClient getNewHttpClient() {  
    5.         try {  
    6.             KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType());  
    7.             trustStore.load(null, null);  
    8.   
    9.             SSLSocketFactory sf = new MySSLSocketFactory(trustStore);  
    10.             sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);  
    11.   
    12.             HttpParams params = new BasicHttpParams();  
    13.   
    14.             HttpConnectionParams.setConnectionTimeout(params, 10000);  
    15.             HttpConnectionParams.setSoTimeout(params, 10000);  
    16.   
    17.             HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);  
    18.             HttpProtocolParams.setContentCharset(params, HTTP.UTF_8);  
    19.   
    20.             SchemeRegistry registry = new SchemeRegistry();  
    21.             registry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));  
    22.             registry.register(new Scheme("https", sf, 443));  
    23.   
    24.             ClientConnectionManager ccm = new ThreadSafeClientConnManager(params, registry);  
    25.   
    26.             HttpConnectionParams.setConnectionTimeout(params, SET_CONNECTION_TIMEOUT);  
    27.             HttpConnectionParams.setSoTimeout(params, SET_SOCKET_TIMEOUT);  
    28.             HttpClient client = new DefaultHttpClient(ccm, params);  
    29.   
    30.             return client;  
    31.         } catch (Exception e) {  
    32.             return new DefaultHttpClient();  
    33.         }  
    34.     }  


    下面是MySSLSocketFactory类

      1. private static class MySSLSocketFactory extends SSLSocketFactory {  
      2.         SSLContext sslContext = SSLContext.getInstance("TLS");  
      3.   
      4.         public MySSLSocketFactory(KeyStore truststore) throws NoSuchAlgorithmException,  
      5.                 KeyManagementException, KeyStoreException, UnrecoverableKeyException {  
      6.             super(truststore);  
      7.   
      8.             TrustManager tm = new X509TrustManager() {  
      9.                 public void checkClientTrusted(X509Certificate[] chain, String authType)  
      10.                         throws CertificateException {  
      11.                 }  
      12.   
      13.                 public void checkServerTrusted(X509Certificate[] chain, String authType)  
      14.                         throws CertificateException {  
      15.                 }  
      16.   
      17.                 public X509Certificate[] getAcceptedIssuers() {  
      18.                     return null;  
      19.                 }  
      20.             };  
      21.   
      22.             sslContext.init(null, new TrustManager[] { tm }, null);  
      23.         }  
      24.   
      25.         @Override  
      26.         public Socket createSocket(Socket socket, String host, int port, boolean autoClose)  
      27.                 throws IOException, UnknownHostException {  
      28.             return sslContext.getSocketFactory().createSocket(socket, host, port, autoClose);  
      29.         }  
      30.   
      31.         @Override  
      32.         public Socket createSocket() throws IOException {  
      33.             return sslContext.getSocketFactory().createSocket();  
      34.         }  
      35.     } 
  • 相关阅读:
    Osg-地图界面显示指北针(指南针)
    学习c# 7.0-7.3的ref、fixed特性并在Unity下测试
    Linux下使用FreeBSD的ee
    C++ 中 malloc/free与 new/delete区别
    CMake 手册详解
    go 从入门到了解
    LINQ:对结果进行分组(MSDN)
    LINQ: List Contains List
    C# 如何使用log4net
    控制台程序要最后加上一句 Environment.Exit(0);
  • 原文地址:https://www.cnblogs.com/xgjblog/p/3834049.html
Copyright © 2011-2022 走看看