我正在使用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
我无法理解响应正文的编码是什么。无论何时我通过邮递员在Chrome上发送请求,响应正文是一个普通的json。
参加该协议https
,我认为okhttp
库处理加密和删除数据。
答案 0 :(得分:5)
删除它:
.addHeader("Accept-Encoding", "gzip")
执行此操作时,您告诉OkHttp您想要管理自己的响应压缩。
如果您没有明确配置Accept-Encoding
,OkHttp会照顾您。它会将标头添加到请求中,并解压缩响应。
答案 1 :(得分:1)
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,它会像这样返回:U n 0E k{ 4v|]W vۑ⸊ 8
删除添加标头accept-encoding没有帮助