提问者:小点点

当请求主体大小超过一定限制时,OkHttpClient POST请求失败


我正在制作一个POST请求序列,每个后续请求都传递下一个令牌,在新请求的请求体中接收到前一个响应。我注意到,如果POSTHTTP请求体大小超过一定限制,请求会在序列中一定数量的请求后超时。典型的请求体大小约为14KB。使用OkHttpClient事件侦听器,我注意到(对于失败的调用)

override fun requestBodyStart(call: Call)

被调用但没有

override fun requestBodyEnd(call: Call, byteCount: Long)

取而代之的是覆盖有趣的请求失败(call: Call,ioe:IOException)被调用时带有Socket超时异常。

如果在每次请求之前进行此调用,它就会起作用(但看起来像黑客攻击)

okHttpClient.connectionPool.evictAll()

不确定OkHTTPClient是否保持其中的某些状态。Charles正在显示带有的失败状态IO:由CLIENT消息取消的流。

我正在用

implementation "com.squareup.okhttp3:okhttp:4.9.3"

后端不在我的控制范围内,我无法优化请求体大小。显然,截断体请求到达服务器时没有响应,因此超时。有没有办法解决这个问题。注意:如果我用Volley替换OkHttp,我看不到这个问题。


共1个答案

匿名用户

如果我理解正确,由于响应,您面临超时问题。您可以配置OkHttpClient

const val CONNECT_TIMEOUT = 10L
const val READ_TIMEOUT = 10L

val client = OkHttpClient.Builder().connectTimeout(CONNECT_TIMEOUT, TimeUnit.MINUTES)
            .readTimeout(READ_TIMEOUT, TimeUnit.MINUTES).build()

这将解决您的问题。它将增加您请求的时间,您将在给定时间内得到响应。