美文网首页
实现一个简单的网络框架之配置篇

实现一个简单的网络框架之配置篇

作者: 大海孤了岛 | 来源:发表于2017-05-16 13:45 被阅读23次

实现网络基本配置

1. 我们定义一个抽象类HttpConfig

public abstract class HttpConfig {
    //设置默认代理
    public String userAgent = "default";
    //设置默认读取时间
    public int soTimeOut = 10000;
    //设置默认连接时间
    public int ConnTimeOut = 10000;
}

2. 实现具体的HttpClientConfig和HttpUrlConnConfig

  • 疑点:为什么这里需要对设置进行划分?

因为我们选择在SDK小于9的情况下,选择使用HttpClient,而当SDK大于或等于9时,选择使用HttpURLConnection。

  • 疑点:为什么需要对其进行划分呢?

我们知道Android Framework里面同时包含HttpURLConnection和Apache HTTP Client 2套Http框架,HttpURLConnection相对轻量级,也比较小,而Apache HTTP Client接口多,比较大,HttpURLConnection是最佳选择,但在Android SDK小于9时,HttpURLConnection存在一些bug,所以当Android SDK小于9时,使用HttpClient,否则使用HttpURLConnection。

HttpClientConfig的实现

/**
 * Created by lq on 2017/5/14.
 * 这是针对使用HttpClientStack执行请求时为https请求配置的SSLSocketFactory类
 */
public class HttpClientConfig extends HttpConfig {
    private static HttpClientConfig sConfig = new HttpClientConfig();
    private SSLSocketFactory mSslSocketFactory;

    private HttpClientConfig(){
    }

    public static HttpClientConfig getConfig(){
        return sConfig;
    }

    //配置https请求的SSLSocketFactory
    public void setHttpsConfig(SSLSocketFactory sslSocketFactory){
        mSslSocketFactory = sslSocketFactory;
    }

    public SSLSocketFactory getSslSocketFactory(){
        return mSslSocketFactory;
    }
}
  • 疑点:http请求与https请求的区别?

HTTPS并非是应用层的一种新协议。只是HTTP通信接口部分用SLL和TLS协议代替而已。通常,HTTP直接和TCP通信,当使用SSL时,演变成先和SSL通信,再由SSL和TCP通信。简而言之,所谓HTTPS,其实就是身披SSL协议的这层外壳的HTTP。

因此,针对Https请求,我们提供了一个设置SSL的接口来实现对其进行不同的设置。

HttpUrlConnConfig的实现

/**
 * Created by lq on 2017/5/14.
 * 这是针对使用HttpUrlStack执行请求时为https请求设置的SSLSocketFactory和HostnameVerifier的配置类
 */

public class HttpUrlConnConfig extends HttpConfig {
    private static HttpUrlConnConfig sConfig = new HttpUrlConnConfig();


    private SSLSocketFactory mSslSocketFactory = null;
    private HostnameVerifier mHostnameVerifier = null;

    private HttpUrlConnConfig(){

    }

    public static HttpUrlConnConfig getConfig(){
        return sConfig;
    }

    //配置https请求的SSLSocketFactory与HostnameVerifier
    public void setHttpsConfig(SSLSocketFactory sslSocketFactory,
                               HostnameVerifier hostnameVerifier){
        mSslSocketFactory = sslSocketFactory;
        mHostnameVerifier = hostnameVerifier;
    }

    public HostnameVerifier getHostnameVerifier(){
        return mHostnameVerifier;
    }

    public SSLSocketFactory getSslSocketFactory() {
        return mSslSocketFactory;
    }
}
  • 疑问:HostnameVerifier是一个什么配置?

这是一个用于主机名验证的基接口。在握手期间,如果URL的主机名和服务器的标识主机名不匹配,则验证机制可以回调此接口实现的程序来判断是否允许此连接。

  • 疑问:为什么在HttpClientConfig中没有此配置?

实际上是因为我们采取了HttpClient忽略证书的方式。

相关文章

网友评论

      本文标题:实现一个简单的网络框架之配置篇

      本文链接:https://www.haomeiwen.com/subject/epnptxtx.html