Подтвердить что ты не робот

Android HttpURLConnection выбрасывает EOFException при запросах HEAD

Этот небольшой фрагмент кода отлично работает на моей 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)
4b9b3361

Ответ 1

Оказалось, что это известная ошибка в реализации класса Android. Вызов Connection.setRequestProperty( "Accept-Encoding", "" ); перед подключением может быть использован как обходной путь.

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