繁体   English   中英

响应http响应正文的编码

[英]encoding of response http response body

我正在使用okhttp库向rest 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

以上文字的编码是什么?

这是响应头:

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库可以处理加密和解密数据。

删除此:

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

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

如果您未明确配置Accept-Encoding ,OkHttp将为您服务。 它将标头添加到请求,并解压缩响应。

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 0?E k?{ 4v|]W vۑ⸊ 8

删除添加标头的接受编码无济于事

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM