使用带有Retrofit和OkHttp的POST-Redirect-GET模式的SocketTimeoutException

时间:2014-03-25 21:48:20

标签: retrofit okhttp

我正在使用Retrofit 1.5.0和OkHttp来调用REST POST端点,该端点为后续GET请求返回302。使用OkHttp 1.3.0,这可以按预期工作。但是,在升级到OkHttp 1.5.0(或更高版本)之后,即使两个请求都已发出,我也会收到SocketTimeoutException。我的RestAdapter使用默认的OkClient。

OkHttp团队最近修复了一个问题(https://github.com/square/okhttp/issues/296),其中Content-Length标头从POST请求保留到GET请求。查看OkHttp 1.5.2的代码,修复似乎是通过在创建GET请求之前删除com.squareup.okhttp.internal.http.HttpURLConnectionImpl.getResponse()中的标头来实现的。但是,如果实例字段fixedContentLength不是-1,则会在com.squareup.okhttp.internal.http.HttpURLConnectionImpl.newHttpEngine()中重新创建Content-Length标头。 <{1}}字段由<{1}} 原始POST请求之前设置,因此结果是当发出GET请求时Content-Length标头以正值出现

这是一个错误还是我从配置角度遗漏了什么?

1 个答案:

答案 0 :(得分:1)

对我来说听起来像个错误。针对OkHttp's bugtracker举报,我很快就会为您解决。