OKHttp的常用配置如配置Https证书,忽略Https证书,Cookie持久化


原文地址:http://www.jianshu.com/p/de83fbe9fcc7


Retrofit应该是目前最火的联网框架,但是内部还是使用的OKHttp,在这总结一下常用的配置。

  1. 做Cookie的持久化。 OKHttp3.0之后和之前做Cookie持久化有了点区别下面直接上代码:
    .cookieJar(new CookieJar() { 
    private final HashMap<String, List<Cookie>> cookieStore = new HashMap<>(); 
    @Override 
    public void saveFromResponse(HttpUrl url, List<Cookie> cookies) { cookieStore.put(url.host(), cookies); } 
    @Override 
    public List<Cookie> loadForRequest(HttpUrl url) {
    List<Cookie> cookies = cookieStore.get(url.host()); 
    return cookies != null ? cookies : new ArrayList<Cookie>(); } })
    2.添加Https证书 - 初始化SSLContext
    public static void setCard(InputStream certificate) {
    try { 
    CertificateFactory certificateFactory = CertificateFactory.getInstance("X.509");
    KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType()); 
    keyStore.load(null); 
    String certificateAlias = Integer.toString(0); keyStore.setCertificateEntry(certificateAlias, certificateFactory.generateCertificate(certificate)); 
    sslContext = SSLContext.getInstance("TLS"); 
    final TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm()); 
    trustManagerFactory.init(keyStore); 
    sslContext.init ( null, trustManagerFactory.getTrustManagers(), new SecureRandom() );
    } catch (CertificateException e) 
    { 
    e.printStackTrace();
    } 
    catch (KeyStoreException e) {
    e.printStackTrace(); }
    catch (NoSuchAlgorithmException e) 
    { e.printStackTrace(); } 
    catch (IOException e) {
    e.printStackTrace(); }
    catch (KeyManagementException e) 
    { e.printStackTrace(); } }
    • 通过构造者模式添加至OKHttpClient
      .sslSocketFactory(sslContext.getSocketFactory()) .hostnameVerifier(new HostnameVerifier() { 
      @Override
      public boolean verify(String hostname, SSLSession session) { 
      return true; } })
      3 . 忽略Https证书
      /** * 忽略所有https证书 */
      private void overlockCard() {
      final TrustManager[] trustAllCerts = new TrustManager[]{
      new X509TrustManager() { 
      @Override
      public void checkClientTrusted( 
      java.security.cert.X509Certificate[] chain, String authType) throws CertificateException { }
      @Override 
      public void checkServerTrusted( java.security.cert.X509Certificate[] chain, String authType) throws CertificateException { }
      @Override public java.security.cert.X509Certificate[] getAcceptedIssuers() { 
      X509Certificate[] x509Certificates = new X509Certificate[0]; return x509Certificates; } }};
      try {
      sslContext = SSLContext.getInstance("SSL"); 
      sslContext.init(null, trustAllCerts, new java.security.SecureRandom()); } 
      catch (Exception e) {
      LogUtil.e("ssl出现异常"); } }
      最终关于整个Okhttp的配置模块:
      private static final String CER_NAME = ""; //https签名证书name
      if (StringUtils.isEmpty(CER_NAME)) {
      //忽略所有证书 
      overlockCard(); } else {
      //选择证书 
      try { 
      setCard(UIUtils.getContext().getAssets().open(CER_NAME)); } 
      catch (IOException e) { 
      e.printStackTrace(); } }
      okHttpClient = new OkHttpClient.Builder().connectTimeout(10, TimeUnit.SECONDS) .readTimeout(10, TimeUnit.SECONDS) .writeTimeout(10, TimeUnit.SECONDS) .sslSocketFactory(sslContext.getSocketFactory()) .hostnameVerifier(new HostnameVerifier() { 
      @Override
      public boolean verify(String hostname, SSLSession session) { 
      return true; } }) .cookieJar(new CookieJar() { 
      private final HashMap<String, List<Cookie>> cookieStore = new HashMap<>(); 
      @Override
      public void saveFromResponse(HttpUrl url, List<Cookie> cookies) { cookieStore.put(url.host(), cookies); } 
      @Override
      public List<Cookie> loadForRequest(HttpUrl url) {
      List<Cookie> cookies = cookieStore.get(url.host()); 
      return cookies != null ? cookies : new ArrayList<Cookie>(); } }) .build();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值