Android的HttpURLConnection在HEAD请求上抛出EOFException

Tai*_*aig 17 java android http urlconnection httpurlconnection

这个小代码片段可以在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() + "" );
    }
}
Run Code Online (Sandbox Code Playgroud)

如果我更换https://github.comhttps://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)
Run Code Online (Sandbox Code Playgroud)

Tai*_*aig 40

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

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

  • 为了将来参考,该bug在JB中被标记为已修复,但我在KK中遇到了完全相同的问题.他们已经切换到KK的基于OkHttp的实现,它似乎有同样的错误.不幸的是,该错误在跟踪器中被"限制",所以我不能要求它重新打开.相同的解决方法仍然有效. (7认同)