背景
原本使用org.apache.commons.httpclient 方法封装进行http接口测试,由于支持异步请求和H2不易,因此研究采用 OkHttpClient方式进行替换
为了保证兼容性,采用的方法调用尽量与原来的org.apache.commons.httpclient 使用方法保持一致
OkHttpClient的强大大家大可百度瞅瞅
踩坑
1.响应结果response.body().string一直不能正常显示,后来改用原有封装的读byte流转String方式解决
封装
构造方法
/**
* 构造函数初始化
*/
private OkHttpClientMethod(){
OkHttpClient.Builder builder = new OkHttpClient.Builder();
builder.readTimeout(30, TimeUnit.SECONDS);//读取超时
builder.connectTimeout(10,TimeUnit.SECONDS);//连接超时
builder.writeTimeout(60,TimeUnit.SECONDS);//写入超时
//协议
List<Protocol> protocols = new ArrayList<Protocol>();
protocols.add(Protocol.HTTP_1_1);
protocols.add(Protocol.HTTP_2);
builder.protocols(protocols);
//ssl
HttpsUtils.SSLParams sslParams = HttpsUtils.getSslSocketFactory(null, null, null);
builder.hostnameVerifier(new HostnameVerifier() {
public boolean verify(String s, SSLSession sslSession) {
return true;
}
});
builder.sslSocketFactory(sslParams.sSLSocketFactory,sslParams.trustManager);
//cookie 自动存储
builder.cookieJar(new CookieJar() {
public void saveFromResponse(HttpUrl url, List<Cookie> cookies) {
cookieStore.put(url.host(),cookies);
}
public List<Cookie> loadForRequest(HttpUrl url) {
List<Cookie> cookies = cookieStore.get(url.host());
return cookies != null ? cookies : new ArrayList<Cookie>();
}
});
mOkHttpClient = builder.build();
}
单例实现
/**
* 单例实现
* @return
*/
public static OkHttpClientMethod getInstance(){
if(mInstance == null){
synchronized (OkHttpClientMethod.class){
if(mInstance == null){
mInstance =