Mam komunikację HTTP z serwerem WWW żądającą danych JSON. Chciałbym skompresować ten strumień danych za pomocą Content-Encoding: gzip
. Czy istnieje sposób, w jaki mogę ustawić Accept-Encoding: gzip
w moim HttpClient? Wyszukiwanie gzip
w odwołaniach do systemu Android nie powoduje wyświetlenia niczego związanego z protokołem HTTP, jak widać tutaj .
109
new WebRequest().get().to("http://www.example.com/").askForGzip(true).executeSync()
. Z. W szczególności metoda parseResponse (...) powinna być tym, czego szukasz.Odpowiedzi:
Powinieneś użyć nagłówków http, aby wskazać, że połączenie może akceptować dane zakodowane w formacie gzip, np .:
Sprawdź odpowiedź pod kątem kodowania treści:
źródło
gzip
aby naprawdę włączyć kompresja gzip. (2) pamiętaj, że serwer może nie spakować odpowiedzi, jeśli jest za mała ...Jeśli używasz interfejsu API na poziomie 8 lub wyższym, istnieje AndroidHttpClient .
Posiada metody pomocnicze, takie jak:
i
prowadząc do znacznie bardziej zwięzłego kodu:
źródło
Myślę, że próbka kodu pod tym linkiem jest bardziej interesująca: ClientGZipContentCompression.java
Używają HttpRequestInterceptor i HttpResponseInterceptor
Próbka na żądanie:
Próbka odpowiedzi:
źródło
Nie używałem GZip, ale zakładam, że powinieneś użyć strumienia wejściowego z twojej
HttpURLConnection
lubHttpResponse
asGZIPInputStream
, a nie jakiejś konkretnej innej klasy.źródło
W moim przypadku było tak:
źródło