我从我的Android应用程序调用了HTTP GET请求:

String urlString = "http://my.service.com/foo";
HttpURLConnection conn = (HttpURLConnection) (new URL(urlString)).openConnection();
conn.setRequestMethod("GET");
conn.setDoInput(true);
conn.setRequestProperty("X-MY-HEADER", "1");
conn.setDoOutput(false);

int code = conn.getResponseCode();


最后一行抛出异常:

java.io.IOException: unknown format (magic number 376)
at java.util.zip.GZIPInputStream.<init>(GZIPInputStream.java:101)
at java.util.zip.GZIPInputStream.<init>(GZIPInputStream.java:81)
at com.android.okhttp.internal.http.HttpEngine.initContentStream(HttpEngine.java:468)
at com.android.okhttp.internal.http.HttpEngine.readResponse(HttpEngine.java:666)
at com.android.okhttp.internal.http.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:347)
at com.android.okhttp.internal.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:296)
at com.android.okhttp.internal.http.HttpURLConnectionImpl.getResponseCode(HttpURLConnectionImpl.java:503)


HTTP引擎似乎在内部使用gzip,这会导致异常。我没有要求任何压缩。为什么会引发此异常?我可以关闭它吗?这个幻数376是什么意思?

最佳答案

我解决了!根据developer.android.com:


默认情况下,此HttpURLConnection的实现请求
服务器使用gzip压缩,并自动解压缩
getInputStream()的调用者的数据。内容编码和
在这种情况下,将清除内容长度响应标头。 Gzip
可以通过在
请求标头:


conn.setRequestProperty("Accept-Encoding", "identity");

07-24 09:45
查看更多