- 下面是我代码的示例:
- 一个是 http 请求一个是 https 请求,http 请求一直爆出网络超时。因为我们做的是仓库管理员店铺扫码,上传。可能网络比较差或者上传数据过多,经常遇到网络超时,time out。
OkHttpClient client = new OkHttpClient();
client.setConnectTimeout(10, TimeUnit.MINUTES);
client.setWriteTimeout(10, TimeUnit.MINUTES);
client.setReadTimeout(10, TimeUnit.MINUTES);
/**
* https请求必须加上证书
*/
if (url.contains("https")){
// 添加 SSLSocketFactory,解决可能出现的EOF错误问题
client.setSslSocketFactory(getSSLSocketFactory());
//https 请求,要加setClient(new OkClient(client))
restAdapter = new RestAdapter.Builder().setCharset(charset).setLogLevel(LogLevel.FULL).setEndpoint(url).setClient(new OkClient(client)).build();
}else{
//正常 http 请求,要加setClient(new OkClient(client))
restAdapter = new RestAdapter.Builder().setCharset(charset).setLogLevel(LogLevel.FULL).setEndpoint(url).setClient(new OkClient(client)).build();
}
public class OkClient extends UrlConnectionClient {
private final OkUrlFactory okUrlFactory;
private static OkHttpClient generateDefaultOkHttp() {
OkHttpClient client = new OkHttpClient();
client.setConnectTimeout(15000L, TimeUnit.MILLISECONDS);
client.setReadTimeout(20000L, TimeUnit.MILLISECONDS);
return client;
}
public OkClient() {
this(generateDefaultOkHttp());
}
public OkClient(OkHttpClient client) {
this.okUrlFactory = new OkUrlFactory(client);
}
protected HttpURLConnection openConnection(Request request) throws IOException {
return this.okUrlFactory.open(new URL(request.getUrl()));
}
}
- 从源码看出,connect timeout 默认建立连接的超时时间 是 15s
client.setConnectTimeout(15000L, TimeUnit.MILLISECONDS);
- 从源码看出,read timeout,默认传递数据的超时时间是 20s
client.setReadTimeout(20000L, TimeUnit.MILLISECONDS);
- 解决:我们自定义网络连接时间和数据传输时间。通过.setClient(new OkClient(client)) 设置。