【问题标题】:HttpURLConnection - uknown format (magic number 376)HttpURLConnection - 未知格式(幻数 376)
【发布时间】:2016-06-16 13:42:11
【问题描述】:

我从我的 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 是什么意思?

【问题讨论】:

标签: java android http gzip httpurlconnection


【解决方案1】:

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

默认情况下,HttpURLConnection 的这个实现要求 服务器使用 gzip 压缩,它会自动解压缩 getInputStream() 调用者的数据。内容编码和 在这种情况下,Content-Length 响应标头被清除。压缩包 可以通过在 请求头:

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

【讨论】:

  • 谢谢,兄弟!你让我今天一整天都感觉很好。我无法获取内容长度,服务器使用 gzip。
猜你喜欢
  • 2012-05-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-10
  • 2011-08-30
  • 2016-07-02
相关资源
最近更新 更多