2016-06-16 9 views
0

ich eine HTTP-GET-Anforderung von meinem Android App anrufen:HttpURLConnection - uknown Format (magische Zahl 376)

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(); 

Die letzte Zeile löst eine Ausnahme:

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-Engine scheint gzip zu verwenden intern, was die Ausnahme verursacht. Ich habe jedoch keine Komprimierung verlangt. Warum wird diese Ausnahme ausgelöst? Kann ich es irgendwie abstellen? Was bedeutet diese magische Zahl 376?

+0

Sind Sie die conn.connect fehlen(); von Beispiel https://developer.android.com/training/basics/network-ops/connecting.html#download – QVDev

+0

Ich schlage vor, dass Sie [HttpClient] (https://developer.android.com/reference/org/apache /http/client/HttpClient.html) –

+0

@LanceJava Ich benutzte es und ich war glücklich, aber sie sagen, dass es für Android 6.0 veraltet ist ... – vojta

Antwort

0

Ich habe es gelöst! Nach developer.android.com:

standardmäßig diese Implementierung von HttpURLConnection fordert, dass Server gzip-Kompression und dekomprimiert automatisch die Daten für Anrufer von getInputStream(). Die Content-Length-Antwortheader Content-Encoding und werden in diesem Fall gelöscht. Gzip Kompression kann durch Einstellen des akzeptablen Codierungen im Request-Header deaktiviert werden:

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