连接错误时,更新OkHttp意外结束流 [英] Retrofit OkHttp unexpected end of stream on Connection error

查看:0
本文介绍了连接错误时,更新OkHttp意外结束流的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用以下依赖项(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);
        }
    };

该URL为HTTPS,指向AWS S3实例。

但是httpsURL终结点出现以下错误。

Java.io.IOException:上的流意外结束 连接{s3.amazonaws.com:443,代理=直接 HostAddress=s3.amazonaws.com/XX.XXX.XXX.XX:443密码套件=无 协议=http/1.1}

经过了与Github discussion 1Github discussion 2类似的线程,但找不到解决方案。

如果我将http替换为http,也不会出现问题或错误!!

知道可能是什么原因导致此问题吗?


编辑1:

因为我不确定问题的原因,所以我从Retrofit中注释掉了OK http as Client。

令人惊讶的是,没有抛出错误。!

return new Retrofit.Builder()
                    .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                    .addConverterFactory(ScalarsConverterFactory.create())
                    .addConverterFactory(GsonConverterFactory.create())
                    .baseUrl(BuildConfig.BASE_URL).build();

任何人想为这个问题做贡献,请发表意见或写下答案。太棒了!

推荐答案

我已经一个多月没有编辑我的问题了,并发布了一个注释以供其他人给出有效的答案。到目前为止,销售经理没有提供任何解决方案,我将解决方案写下来以备将来参考。

虽然下面不完全是我想要的,但我可以通过避免OkHttpClient

来获得预期的响应

这是我提到的版本。同样的问题 可能会出现在将来的发行版本中,也可能不会出现。

是的,你没看错。避免了OkHttpClient,并单独尝试了Retrofit

return new Retrofit.Builder()
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.addConverterFactory(ScalarsConverterFactory.create())
.addConverterFactory(GsonConverterFactory.create())
.baseUrl(BuildConfig.BASE_URL).build();
即使这阻止了获取HTTP日志,我仍然能够 获取HTTPHTTPS的成功响应。

这篇关于连接错误时,更新OkHttp意外结束流的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆