我正在尝试处理GZIP的服务器响应。响应带有标题

Content-Type: application/x-gzip

但没有标题
Content-Encoding: gzip

如果我使用代理添加该 header ,则响应就可以很好地解析了。
我对服务器没有任何控制权,因此无法添加 header 。

我可以强制将Retrofit视为GZIP内容吗?有没有更好的办法?
服务器的URL为:
http://crowdtorch.cms.s3.amazonaws.com/4474/Updates/update-1.xml

最佳答案

有比重新发明轮子更好的方法。只需自己添加Content-Encoding header 。

.addNetworkInterceptor((Interceptor.Chain chain) -> {
    Request req = chain.request();
    Headers.Builder headersBuilder = req.headers().newBuilder();

    String credential = Credentials.basic(...);
    headersBuilder.set("Authorization", credential);

    Response res = chain.proceed(req.newBuilder().headers(headersBuilder.build()).build());

    return res.newBuilder()
        .header("Content-Encoding", "gzip")
        .header("Content-Type", ""application/json")
        .build();
})

实际上,您的代码是使用内部代码(例如JDK的com.sun包)的弊端的经典示例。 RealResponseBody不再具有该构造函数。

关于gzip - 改造: how to parse GZIP'd response without Content-Encoding: gzip header,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37333498/

10-13 22:05