OkHttp 2.0 响应(POST 请求)正文字符串为空字符串

Posted

技术标签:

【中文标题】OkHttp 2.0 响应(POST 请求)正文字符串为空字符串【英文标题】:OkHttp 2.0 Response (of a POST request) body string is an empty string 【发布时间】:2014-11-30 12:58:09 【问题描述】:

我正在切换到 OkHttp 2.0 提供的新请求/响应实现

GET 请求没有问题,我可以轻松读取响应正文字符串,但从 POST 请求读取响应正文字符串时出现问题。

实际上,我向我的服务器发出 POST 请求(请求正文是 JSON 媒体类型),该服务器以 201 http 状态代码和响应正文中的 JSON 进行响应。

POST 请求正常(服务器正在保存数据),但我无法从我的 android 应用程序中读取正文字符串。响应正文字符串为空字符串,而响应 http 状态码正确为 201。

我正在使用 response.body().string() 读取响应正文,就像在 GET 请求中一样。 我应该在客户端/服务器端做一些特别的事情来正确读取响应正文字符串吗?

【问题讨论】:

请分享上述代码,以便我们更容易看到您在做什么,这可能是执行顺序问题。 【参考方案1】:

看来问题出在服务器端。

当我从服务器端指定响应 content_type 为“application/json”且 status=200(我使用的是 201)时,来自 OkHttp 的 response.body().string() 返回了真正的响应 JSON 而不是空的字符串。

【讨论】:

POSTMan 和 Charles Proxy 是你们的朋友。根据 HTTP 1.1 RFC,标头也应使用“-”分隔。如果您的服务器用下划线响应,我会解决这个问题。 (幸好OKHttp宽容)

以上是关于OkHttp 2.0 响应(POST 请求)正文字符串为空字符串的主要内容,如果未能解决你的问题,请参考以下文章

在 Android 的 OKhttp 中通过 POST 请求发送 JSON 正文

当使用 okhttp 发送 post 请求时,服务器接收到的请求正文为空。可能是啥问题?

Okhttp3、http2多路复用POST请求高峰负载时响应时间长

使用 OkHttp 缓存 POST 请求

Android:OkHttp的理解和使用

AFNetworking 2.0:是不是可以将纯 json 放入 POST 请求的正文中?