# okhttp

返回开源分支:java-实用工具

OkHttp和HttpClient

在性能和使用上不分伯仲,根据实际业务选择即可

# GET请求过程

返回顶部

//HTTP GET
public String get(String url) throws IOException {
    //新建OKHttpClient客户端
    OkHttpClient client = new OkHttpClient();
    //新建一个Request对象
    Request request = new Request.Builder()
            .url(url)
            .build();
    //Response为OKHttp中的响应
    Response response = client.newCall(request).execute();
    if (response.isSuccessful()) {
        return response.body().string();
    }else{
        throw new IOException("Unexpected code " + response);
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

看下builder里面的参数:

final Dispatcher dispatcher;  //分发器
final Proxy proxy;  //代理
final List<Protocol> protocols; //协议
final List<ConnectionSpec> connectionSpecs; //传输层版本和连接协议
final List<Interceptor> interceptors; //拦截器
final List<Interceptor> networkInterceptors; //网络拦截器
final ProxySelector proxySelector; //代理选择
final CookieJar cookieJar; //cookie
final Cache cache; //缓存
final InternalCache internalCache;  //内部缓存
final SocketFactory socketFactory;  //socket 工厂
final SSLSocketFactory sslSocketFactory; //安全套接层socket 工厂,用于HTTPS
final CertificateChainCleaner certificateChainCleaner; // 验证确认响应证书 适用 HTTPS 请求连接的主机名。
final HostnameVerifier hostnameVerifier;    //  主机名字确认
final CertificatePinner certificatePinner;  //  证书链
final Authenticator proxyAuthenticator;     //代理身份验证
final Authenticator authenticator;      // 本地身份验证
final ConnectionPool connectionPool;    //连接池,复用连接
final Dns dns;  //域名
final boolean followSslRedirects;  //安全套接层重定向
final boolean followRedirects;  //本地重定向
final boolean retryOnConnectionFailure; //重试连接失败
final int connectTimeout;    //连接超时
final int readTimeout; //read 超时
final int writeTimeout; //write 超时
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

真正的流程要从里面的newCall()方法中说起:

/**
*  Prepares the {@code request} to be executed at some point in the future.
*  准备将要被执行的request
*/
@Override
public Call newCall(Request request) {
    return new RealCall(this, request);
}
1
2
3
4
5
6
7
8