1

我正在使用 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 的代码,似乎可以通过com.squareup.okhttp.internal.http.HttpURLConnectionImpl.getResponse()在创建 GET 请求之前删除该标头来实现修复;但是,如果实例字段fixedContentLength不是 -1,则 Content-Length 标头会在 中重新创建com.squareup.okhttp.internal.http.HttpURLConnectionImpl.newHttpEngine()。该fixedContentLength字段在原始 POST 请求retrofit.client.UrlConnectionClient.prepareRequest() 之前设置,因此结果是在发出 GET 请求时 Content-Length 标头存在正值。

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

4

1 回答 1

1

对我来说听起来像是一个错误。向OkHttp 的 bugtracker报告它,我很快就会为您修复。

于 2014-03-26T04:05:37.540 回答