OKHTTP GET 和 POST 请求返回空正文消息

Posted

技术标签:

【中文标题】OKHTTP GET 和 POST 请求返回空正文消息【英文标题】:OKHTTP GET and POST request return empty body message 【发布时间】:2021-08-06 09:42:45 【问题描述】:

我想在我的服务器上上传文件,我决定尝试 OKHTTP 而不是我当前基于 android 自己的 HTTP 实现和 AsyncTask 的方法。

无论如何,我使用了 OKHTTP 及其异步实现(来自它自己的配方),但它在 GET 和 POST 方法中都返回了一个空消息(请求代码正常,消息为空)。 我是不是执行错了,还是还有什么我没有考虑到的?与此同时,我找不到类似的案例,除了this 说使用了 AsyncTask。

代码如下:

Request request;
Response response;
private final OkHttpClient client = new OkHttpClient();
private static final String postman_url = "https://postman-echo.com/get?foo1=bar1&foo2=bar2";
String message_body;

public void Get_Synchronous() throws IOException

    request = new Request.Builder()
            .url(postman_url)
            .build();

    Call call = client.newCall(request);
    response = call.execute();

    message_body = response.toString();
    //assertThat(response.code(), equalTo(200));


public void Get_Asynchronous()

    request = new Request.Builder()
            .url(postman_url)
            .build();

    Call call = client.newCall(request);
    call.enqueue(new Callback() 
        public void onResponse(Call call, Response response)
                throws IOException
        
            message_body = response.toString();
            
        

        public void onFailure(Call call, IOException e)
        
            
        
    );

编辑: 我收到了登录响应:

onResponse: 响应protocol=h2, code=200, message=, url=https://postman-echo.com/get?foo1=bar1&foo2=bar2

【问题讨论】:

能否请您添加日志响应?另外,你能记录下失败的 iOException 吗?这将有助于更好地理解错误。预期的反应是什么?很多时候文件上传 apis 只是返回 200 来确认文件已上传,没有别的。 谢谢,@MohitAjwani 我已经添加了日志 所以这个 API 返回的是空消息。虽然是成功。所以,这是标准的 API 行为。 亲爱的@MohitAjwani 它应该返回如下内容:" "args":"foo1":"bar1","foo2":"bar2","headers":"x- forwarded-proto":"https","x- ..." 尝试添加转换器工厂 - futurestud.io/tutorials/… 这应该有助于将响应转换为对象,以便您可以打印它。 【参考方案1】:

好的,对于任何想从呼叫中接收字符串的人,responseresponse.messgage() 不提供。要从您的提供者那里获取响应,您只需要在 onResponse 中调用 response.body().string(),它会在您的请求中返回消息。

但毕竟,如果您想使用以下方式接收 JSON 文件,Retrofit 是一个更好的选择 .addConverterFactory(GsonConverterFactory.create(gson)).

如果您仍想接收字符串,请使用 .addConverterFactory(ScalarsConverterFactory.create()),如 here 所述。

【讨论】:

以上是关于OKHTTP GET 和 POST 请求返回空正文消息的主要内容,如果未能解决你的问题,请参考以下文章

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

来自 React 的 Express POST 请求返回空正文

OkHttpOkHttp Get 和 Post 请求 ( 同步 Get 请求 | 异步 Get 请求 | 同步 Post 请求 | 异步 Post 请求 )

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

Azure APIM 在预检和从 axios 发出的 GET 请求时返回空响应正文,状态代码为 200

Retrofit2 OkHttp3 响应正文空错误