【问题标题】:Retrofit + OkHttp Unexpected Status Line <!DOCType html>改造 + OkHttp 意外状态行 <!DOCType html>
【发布时间】:2016-04-21 20:47:33
【问题描述】:

几个月来,我的应用程序运行良好,但几周后,当我执行顺序请求时,有时会出现此错误。我没有更新我的应用程序中的任何内容。 iOS 版本关闭应用程序没有问题,但有时我会收到此错误,尤其是在我第一次请求时。

02-05 04:45:14.017  15972-16249/com.myapp.android D/Retrofit﹕ java.net.ProtocolException: Unexpected status line: <!DOCType html>
            at com.squareup.okhttp.internal.http.StatusLine.parse(StatusLine.java:73)
            at com.squareup.okhttp.internal.http.HttpConnection.readResponse(HttpConnection.java:187)
            at com.squareup.okhttp.internal.http.HttpTransport.readResponseHeaders(HttpTransport.java:80)
            at com.squareup.okhttp.internal.http.HttpEngine.readNetworkResponse(HttpEngine.java:791)
            at com.squareup.okhttp.internal.http.HttpEngine.access$200(HttpEngine.java:90)
            at com.squareup.okhttp.internal.http.HttpEngine$NetworkInterceptorChain.proceed(HttpEngine.java:784)
            at com.squareup.okhttp.internal.http.HttpEngine.readResponse(HttpEngine.java:645)
            at com.squareup.okhttp.Call.getResponse(Call.java:263)
            at com.squareup.okhttp.Call$ApplicationInterceptorChain.proceed(Call.java:219)
            at com.squareup.okhttp.Call.getResponseWithInterceptorChain(Call.java:192)
            at com.squareup.okhttp.Call.execute(Call.java:79)
            at retrofit.client.OkClient.execute(OkClient.java:53)
            at retrofit.RestAdapter$RestHandler.invokeRequest(RestAdapter.java:326)
            at retrofit.RestAdapter$RestHandler.access$100(RestAdapter.java:220)
            at retrofit.RestAdapter$RestHandler$1.invoke(RestAdapter.java:265)
            at retrofit.RxSupport$2.run(RxSupport.java:55)
            at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:422)
            at java.util.concurrent.FutureTask.run(FutureTask.java:237)
            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
            at retrofit.Platform$Android$2$1.run(Platform.java:142)
            at java.lang.Thread.run(Thread.java:841)
02-05 04:45:14.017  15972-16249/com.myapp.android D/Retrofit﹕ ---- END ERROR

【问题讨论】:

  • 这不是改造问题,无论您期望什么,您的 API 都会返回 HTML 而不是 JSON/XML。如果您尝试在浏览器休息客户端中发出相同的请求并查看响应,我的建议是什么。您应该调试并找到在改造中传递的确切 url 和字段/查询/标题。

标签: android retrofit okhttp


【解决方案1】:

此错误是由连接重用问题引起的。你知道上一个响应的响应代码和标头吗? OkHttp 将其解释为没有正文,服务器不同意。

【讨论】:

  • 之前的响应头是401。这会导致问题吗?
  • 实际上我遇到了我认为的问题。我有一个后台调用,我在后台调用它大约 3-4 次,它的响应是 401。当我关闭这个 api 调用时,我没有收到这个错误。可能吗? @杰西威尔逊
  • 你找到解决这个@savepopulation 的方法了吗?即使我有同样的问题。使用 DefaultHttpClient 时响应很好,但是当我尝试使用 OkHttp 时,它会抛出一些 DOCTYPE 作为响应。
  • 其实我的问题是关于服务器端的。当我调用 api 时发生内部错误,并且 api 无法向我返回成功的 http 响应
【解决方案2】:

将标头值设置为,

@Headers("Connection:close")

为我工作。

【讨论】:

  • 是的,这是一个解决方案,但我不确定它是否正确使用。我认为服务器端应该决定关闭或恢复连接。
猜你喜欢
  • 2016-11-13
  • 1970-01-01
  • 1970-01-01
  • 2015-02-25
  • 1970-01-01
  • 2014-06-07
  • 1970-01-01
  • 1970-01-01
  • 2019-09-20
相关资源
最近更新 更多