我的Charles代理中出现"IO: Stream 3 not progressing“。
我有一个简单的RxJava调用:
subscription.add(api.sendSources(sendDataBody)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe({
callback.onFinished(it)
}, {
callback.onError(-1)
}))一个简单的POJO:
data class SendDataBody(
@Json(name = "authtoken")
var authToken: String,
) : Serializable
open class SendDataResponse(
@Json(name = "success")
var success: Boolean,
@Json(name = "error")
var error: String?
)这是我的界面:
@Headers(
"Content-Type: application/json; charset=UTF-8",
"accept-encoding: gzip, deflate",
"Accept: */*",
"Cache-Control: no-cache"
)
@POST("sourcedata")
fun sendSources(@Body sendDataBody: SendDataBody) : Single<Any>以下是库版本:
// Retrofit
implementation "com.squareup.retrofit2:retrofit:2.3.0"
implementation "com.squareup.retrofit2:converter-moshi:2.3.0"
implementation "com.squareup.okhttp3:logging-interceptor:3.9.0"
implementation 'com.squareup.retrofit2:converter-gson:2.4.0'
// RxJava lib
implementation 'io.reactivex.rxjava2:rxandroid:2.1.1'
implementation "io.reactivex.rxjava2:rxjava:2.2.6"
implementation 'com.jakewharton.retrofit:retrofit2-rxjava2-adapter:1.0.0'当与Charles一起检查时,第一次应用程序总是说"IO Stream 3没有进展“,但应用程序会自动再次调用,第二次它工作正常。我还没有编写任何重试API调用的代码。当使用Postman进行同样的尝试时,它会立即生效。所以它不是后端。我试着模仿Postman的头,也试着不用RxJava,没有区别。

Second time工作正常:

连接调试器时,错误消息为:
result = {Response@7889} "Response{protocol=h2, code=200, message=, url=https://api.myserver.nl/sourcedata}"
body = "�\b�������������V*.MNN-.V�JK�)N�QJ-*�"
errorBody = null似乎来自服务器的响应是错误的,但第二次对象是正确的。
发布于 2019-07-03 16:53:09
我也遇到过类似的问题。Okhttp静默地执行此操作,它会尝试默认路由,如果失败,则会根据每个示例尝试不同的路由。
在我的例子中,ipv6出现了问题,这是失败的,第二次重试时它正在使用ipv4,这是工作的。
从日志中我不能说如何修复它,但我会从Okhttp调试RetryAndFollowUpInterceptor,并找出有关哪个路由失败,哪个路由成功的更多细节。
https://stackoverflow.com/questions/56699489
复制相似问题