java - 响应http响应体的编码

标签 java http https okhttp

我正在使用 okhttp 库向 rest api 发送请求。这是我用于向 https 发送请求的 java 代码:

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�

以上文字的编码是什么?

这是响应头:

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

我不明白响应体的编码是什么。无论当我通过 postman 扩展在 chrome 上发送请求时,响应主体是一个普通的 json。 注意协议(protocol)是 https,我认为 okhttp 库处理加密和解密数据。

最佳答案

删除这个:

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

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

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

关于java - 响应http响应体的编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36225057/

相关文章:

ssl - 发送 HTTP 请求时出错。 (无法从 mule HTTPS 连接到 openAM)

java - 未在 ViewScoped bean 中设置 viewParam 值

java - 当构造函数具有类的类型时,这意味着什么?

java - 从特定类扩展,同时实现共享方法

web-services - 使用 Webhooks 你知道哪些 Web 应用程序

http - 浏览器和 Web 服务器之间的通信是如何进行的?

java - 更改 jTableHeader 的字体和背景颜色

javascript - 我如何在 Angular js中添加DELETE的默认 header

asp.net-core - 用于 asp.net 核心应用程序的 ngrok 和 https 隧道

javascript - Optimizely如何欺骗chrome不提示加载不安全内容