我正在使用 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/