我正在使用 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 标头存在正值。
这是一个错误还是我从配置的角度错过了什么?