【发布时间】:2019-09-20 20:18:23
【问题描述】:
我正在使用以下依赖项(Retrofit 和 OkHttp)。
implementation 'com.squareup.retrofit2:retrofit:2.3.0'
implementation 'com.squareup.retrofit2:converter-gson:2.3.0'
implementation 'com.squareup.retrofit2:converter-scalars:2.3.0'
implementation 'com.squareup.okhttp3:okhttp:3.10.0'
implementation 'com.squareup.okhttp3:logging-interceptor:3.10.0'
下面是我的代码:
OkHttpClient okHttpClient = new OkHttpClient.Builder()
.addInterceptor(cache_interceptor)
.cache(cache)
.connectTimeout(AppConstants.TIME_OUT, TimeUnit.SECONDS)
.readTimeout(AppConstants.TIME_OUT, TimeUnit.SECONDS)
.writeTimeout(AppConstants.TIME_OUT, TimeUnit.SECONDS)
.connectionSpecs(Collections.singletonList(ConnectionSpec.CLEARTEXT))
.retryOnConnectionFailure(false)
.build();
return new Retrofit.Builder()
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.client(okHttpClient)
.addConverterFactory(ScalarsConverterFactory.create())
.addConverterFactory(GsonConverterFactory.create())
.baseUrl(BuildConfig.BASE_URL).build();
private final Interceptor cache_interceptor = new Interceptor() {
@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request().newBuilder().addHeader("Connection", "close").build();
return chain.proceed(request);
}
};
网址是https之一,指向AWS S3实例。
但我收到https URL 端点的以下错误。
java.io.IOException:流意外结束 连接{s3.amazonaws.com:443,代理=DIRECT hostAddress=s3.amazonaws.com/XX.XXX.XXX.XX:443 cipherSuite=none 协议=http/1.1}
经历过类似的话题,如Github discussion 1 和Github discussion 2,但找不到解决办法。
如果我将 https 替换为 http ,也没有问题或错误!!
知道可能导致问题的原因吗?
编辑 1:
由于我不确定导致问题的原因,我只是将 OK Http 注释为来自 Retrofit 的客户端。
而且令人惊讶的是没有抛出错误。 !
return new Retrofit.Builder()
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.addConverterFactory(ScalarsConverterFactory.create())
.addConverterFactory(GsonConverterFactory.create())
.baseUrl(BuildConfig.BASE_URL).build();
任何想为这个问题做出贡献的人,请评论或写一个答案。非常可观!
【问题讨论】:
-
检查this
-
我已经在拦截器中有 addHeader("Connection", "close") 。但没有帮助! @Basi
-
@Basi
addHeader(...)是如何解决连接相关问题的? -
@Sreehari 检查 AWS 服务器设置或配置。您这边没有问题。
-
@MD 感谢您的确认。但我交叉检查了 AWS 方面,没有比 http 更能阻止 https 的特定值。它只是一个文件下载。它在浏览器和其他平台上运行良好......完全失去了:(
标签: android https retrofit2 okhttp