响应 http 响应的编码 body

encoding of response http response body

我正在使用 okhttp 库发送休息请求 api。这是我的 java 发送请求到 https 的代码:

RequestBody body = RequestBody.create(JSON, requestBody);

    Request request = new Request.Builder().url("https://examplesite.com/json/").post(body)
            .addHeader("Accept", "application/json, text/javascript, */*; q=0.01")
            .addHeader("Accept-Encoding", "gzip").addHeader("Accept-Language", "en-US,en;q=0.8,fa;q=0.6,ar;q=0.4")
            .build();

    Response response = client.newCall(request).execute();
    String res = new String(response.body().string().getBytes("UTF-8"));

    System.out.println(res);

res 变量是:�CU8{$���'L�@R�W*�$��b�H�E�l�K�C� 30��}c&,p��q���)+3�R�28���#SC�

以上文字的编码是什么?

这是回应 header:

Accept:application/json, text/javascript, */*; q=0.01
Accept-Encoding:gzip, deflate
Accept-Language:en-US,en;q=0.8,fa;q=0.6,ar;q=0.4
Connection:keep-alive
Content-Length:95
Content-Type:application/json

我无法理解响应的编码是什么body。无论如何,当我通过 chrome 上的邮递员分机发送请求时,响应 body 是正常的 json。 注意协议是 https,我认为 okhttp 库处理加密和解密数据。

删除这个:

 .addHeader("Accept-Encoding", "gzip")

当您这样做时,您是在告诉 OkHttp 您想要管理自己的响应压缩。

如果您没有显式配置 Accept-Encoding,OkHttp 会照顾您。它会将 header 添加到请求中,并解压缩响应。

String commentUri = "http://comment.bilibili.com/4.xml";

    Log.d("request_comment url", commentUri);
    Request requestComment = new Request.Builder()
            .addHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8")
//                .addHeader("Accept-Encoding", "gzip, deflate")
            .addHeader("Connection", "keep-alive")
            .addHeader("Accept", "*/*")
            .url(commentUri)
            .build();

我遇到了同样的问题,我是这样用okhttp 3.2.0的,但是还是不能解压defalte,它returns是这样的:U��n��0E����k{����4v |]W�v6⸊�8

删除添加headeraccept-encoding没有帮助