Android Retrofit 发布请求未到达服务器

Posted

技术标签:

【中文标题】Android Retrofit 发布请求未到达服务器【英文标题】:Android Retrofit post request doesn't reach server 【发布时间】:2016-09-29 05:34:06 【问题描述】:

我有一个很奇怪的问题。发布请求未到达服务器。我有 HttpInterceptorLogger

,所以我看到了日志(见下文)。其他 post 请求正常工作,但他们没有发送 json:

还通过浏览器检查了这个请求,它工作正常。不知道哪里可能是一个问题。请帮忙解决。

我有要求:

@POST(LEAD_SET)
Observable<ResponsePojo<LeadsPostPackage>> setFullLead(@Body RequestPojo<LeadsPostPackage> leadsRequestPojoRequestPojo)

这是回应:

05-31 11:50:06.682 20489-20489/com.amocrm.prototype D/OkHttp: --> POST https://andmhxsq.amocrm.com/private/api/v2/json/leads/set http/1.1
05-31 11:50:06.682 20489-20489/com.amocrm.prototype D/OkHttp: Content-Type: application/json; charset=UTF-8
05-31 11:50:06.682 20489-20489/com.amocrm.prototype D/OkHttp: Content-Length: 164
05-31 11:50:06.682 20489-20489/com.amocrm.prototype D/OkHttp: Cookie: BITRIX_SM_LOGIN=amodeveloper%40yandex.ru; expires=Wed, 05-May-2021 08:50:01 GMT; path=/; domain=.amocrm.com;BITRIX_SM_SALE_UID=0; expires=Fri, 26-May-2017 08:50:01 GMT; path=/; domain=.amocrm.com;session_id=h44nqh6np985fj5dhe9jqs1ensnh4ga0gdf6sbr10o76kv53nb81; path=/; domain=.amocrm.com;user_lang=en; expires=Mon, 31-May-2021 08:50:01 GMT; path=/; domain=.amocrm.com;
05-31 11:50:06.682 20489-20489/com.amocrm.prototype D/OkHttp: "request":"leads":"update":["id":"40604699","last_modified":"1464684606","name":"Lead with many custom field","pipeline_id":"171910","status_id":"10753387"]
05-31 11:50:06.683 20489-20489/com.amocrm.prototype D/OkHttp: --> END POST (164-byte body)

【问题讨论】:

【参考方案1】:

请检查您的服务器是否支持 HTTP 2 协议。如果没有,那可能是个问题,因为 Retrofit2 默认使用最新的可用协议。改造服务通常使用 OkHttpClient 初始化,默认支持的协议是:HTTP 1.1、SPDY 3.1 和 HTTP2。其中最新的是 HTTP 2。

如果你想设置支持 HTTP 1.1,你应该明确设置它:

OkHttpClient okHttpClient = new OkHttpClient();
okHttpClient.setProtocols(Arrays.asList(Protocol.HTTP_1_1);

记得只添加Protocol.HTTP_1_1

【讨论】:

很好的尝试,但 OP 在日志中的第一行与之相矛盾:--&gt; POST https://andmhxsq.amocrm.com/private/api/v2/json/leads/set http/1.1。如果客户端使用的是 HTTP2,则客户端不会发送该信息 是的。没注意到。

以上是关于Android Retrofit 发布请求未到达服务器的主要内容,如果未能解决你的问题,请参考以下文章

Android网络请求框架之Retrofit

Android OkHttp + Retrofit 取消请求的方法

Android Kotlin Retrofit Post Request 输入的数据未发送

使用 Retrofit 发送带有参数的 Post 请求

Android Retrofit详解

Android Retrofit2 reddit 404 未找到