【问题标题】:Android's HttpURLConnection throws EOFException on HEAD requestsAndroid 的 HttpURLConnection 在 HEAD 请求上抛出 EOFException
【发布时间】:2013-07-14 10:06:16
【问题描述】:

这个小代码 sn-p 在我的 Mac 的 JVM 上运行良好。不幸的是,它在 Android 4.2 上执行时会崩溃。

import java.net.HttpURLConnection;
import java.net.URL;

public class App
{
    public static void main( String... arguments ) throws Exception
    {
        HttpURLConnection connection = (HttpURLConnection) new URL( "https://github.com" ).openConnection();
        connection.setRequestMethod( "HEAD" );

        System.out.println( connection.getResponseCode() + "" );
    }
}

如果我将https://github.com 替换为https://www.facebook.com,它可以正常工作,但我无法弄清楚原因。

异常不包含消息;所以这至少是堆栈跟踪。

java.io.EOFException
        at java.util.zip.GZIPInputStream.readFully(GZIPInputStream.java:206)
        at java.util.zip.GZIPInputStream.<init>(GZIPInputStream.java:98)
        at java.util.zip.GZIPInputStream.<init>(GZIPInputStream.java:81)
        at libcore.net.http.HttpEngine.initContentStream(HttpEngine.java:541)
        at libcore.net.http.HttpEngine.readResponse(HttpEngine.java:844)
        at libcore.net.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:283)
        at libcore.net.http.HttpURLConnectionImpl.getResponseCode(HttpURLConnectionImpl.java:495)
        at libcore.net.http.HttpsURLConnectionImpl.getResponseCode(HttpsURLConnectionImpl.java:134)

【问题讨论】:

  • 您的代码对我来说工作正常。确保您有互联网连接和正确的设置以访问github.com URL
  • 你是在安卓上运行的吗?

标签: java android http httpurlconnection urlconnection


【解决方案1】:

原来这是 Android 类实现中的一个已知错误。在连接之前调用Connection.setRequestProperty( "Accept-Encoding", "" ); 可以作为解决方法。

https://code.google.com/p/android/issues/detail?id=24672

【讨论】:

  • 为了将来参考,该错误在 JB 中被标记为已修复,但我在 KK 中遇到了完全相同的问题。他们已经切换到 KK 的基于 OkHttp 的实现,而且似乎有同样的错误。不幸的是,该错误在跟踪器中受到“限制”,因此我不能要求重新打开它。相同的解决方法仍然有效。
猜你喜欢
  • 2012-09-01
  • 2013-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-11
  • 2013-02-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多