[英]OkHttp request HTTPS is very slow on Android
HTTPS 请求转换大约一分钟...我的请求 url 是https://auth.timeface.cn/aliyun/sts 。 服务器使用 TLS 1.0 和 AES_256_CBC 编码。 我从 Chrome 提示中收到了这些消息。
所以我的代码就像
String serverAddress = "https://auth.timeface.cn/aliyun/sts";
OkHttpClient httpClient = new OkHttpClient();
if (serverAddress.contains("https")) {
ConnectionSpec spec = new ConnectionSpec.Builder(ConnectionSpec.MODERN_TLS)
.tlsVersions(TlsVersion.TLS_1_0)
.cipherSuites(CipherSuite.TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA)
.supportsTlsExtensions(true)
.build();
httpClient.setConnectionSpecs(Collections.singletonList(spec));
httpClient.setHostnameVerifier(new HostnameVerifier() {
@Override
public boolean verify(String hostname, SSLSession session) {
return true;
}
});
httpClient.setConnectTimeout(1, TimeUnit.HOURS);
}
Request request = new Request.Builder()
.url(serverAddress)
.get()
.build();
Response response = httpClient.newCall(request).execute();
String responseStr = response.body().string();
为什么?
我的用法有问题吗?
execute 方法会阻塞您的主线程,这意味着它会停止您的应用程序,直到网络调用完成。 您应该使用 enqueue 方法进行异步调用。
String serverAddress = "https://auth.timeface.cn/aliyun/sts";
OkHttpClient httpClient = new OkHttpClient();
if (serverAddress.contains("https")) {
ConnectionSpec spec = new ConnectionSpec.Builder(ConnectionSpec.MODERN_TLS)
.tlsVersions(TlsVersion.TLS_1_0)
.cipherSuites(CipherSuite.TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA)
.supportsTlsExtensions(true)
.build();
httpClient.setConnectionSpecs(Collections.singletonList(spec));
httpClient.setHostnameVerifier(new HostnameVerifier() {
@Override
public boolean verify(String hostname, SSLSession session) {
return true;
}
});
httpClient.setConnectTimeout(1, TimeUnit.HOURS);
}
Request request = new Request.Builder()
.url(serverAddress)
.build();
httpClient.newCall(request).enqueue(new Callback() {
@Override public void onFailure(Request request, Throwable throwable) {
throwable.printStackTrace();
}
@Override public void onResponse(Response response) throws IOException {
if (!response.isSuccessful()) throw new IOException("Unexpected code " + response);
String responseStr = response.body().string();
}
});
只需在调用前提供 ProgressBar 并在 onFailure() 和 onResponse() 上删除它们
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.