Okhttp从2.4升级到3.9.1对HTTPS认证的影响
严格意义上讲,本文不应属于这个系列,但由于前面两篇博客的代码是参考《Android Https相关完全解析 当OkHttp遇到Https》改写的,当时的okhttp框架的版本为2.4.0,但现在okhttp版本升级到了3.9.1,并且查了一下相关资料,发现okhttp从2.x到3.x版本的api变化比较大,因此我也尝试着将okhttp版本进行升级,并做简要记录与大家分享。
1.1 okhttp Jar包升级
将compile 'com.squareup.okhttp:okhttp:2.4.0'
更新为compile 'com.squareup.okhttp3:okhttp:3.9.1'
,Android Studio会自动下载3.9.1的okhttp jar包。
1.2 更新Api及修正相关编译错误
Rebuild project,会发现有许多错误
1.2.1 包名更新
Okhttp2.x的包名为com.squareup.okhttp
import com.squareup.okhttp.Call;
import com.squareup.okhttp.Callback;
import com.squareup.okhttp.OkHttpClient;
import com.squareup.okhttp.Request;
import com.squareup.okhttp.Response;
但okhttp3.x已经变为okhttp3,如上面的包名则相对应变为:
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
1.2.2 OkHttpClient创建方式不同
okhttp2.x直接new OkHttpClient,而okhttp3.x 中提供了Builder,很好的使用了创建者设计模式
OkHttpClient.Builder okHttpClient = new OkHttpClient.Builder();
1.2.3 OkHttpClient参数的配置变化
之前okhttp2.x参数可以直接OkHttpClient.setConnectTimeout()设置,现在OkHttpClient使用创建者模式,需要在OkHttpClient.Builder上设置可配置的参数:
okHttpClient.connectTimeout(5, TimeUnit.SECONDS);
okHttpClient.readTimeout(5, TimeUnit.SECONDS);
1.2.4 setCookieHandler变为cookieJar
okhttp2.x调用OkHttpClient的setCookieHandler方法,CookieHandler 的子类CookieManager实现了cookie的具体管理方法,
mOkHttpClient.setCookieHandler(new CookieManager(null, CookiePolicy.ACCEPT_ORIGINAL_SERVER));
okhttp3中已经没有setCookieHandler方法了,而改成了cookieJar,需要在OkHttpClient的Builder的cookieJar方法中设置。
okHttpClient.cookieJar(new CookieJar() {
private final HashMap<HttpUrl, List<Cookie>> cookieStore = new HashMap<>();
@Override
public