Próbuję zdekompresować odpowiedź GZIPed HTTP za pomocą GZIPInputStream
. Jednak zawsze mam ten sam wyjątek przy próbie odczytania strumienia: java.util.zip.ZipException: invalid bit length repeat
Dekompresuj odpowiedź GZIPed HTTP w języku Java
Moje żądania HTTP Header:
GET www.myurl.com HTTP/1.0\r\n
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; fr; rv:1.9.2) Gecko/20100115 Firefox/3.6\r\n
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n
Accept-Language: fr,fr-fr;q=0.8,en-us;q=0.5,en;q=0.3\r\n
Accept-Encoding: gzip,deflate\r\n
Accept-Charset: ISO-8859-1,UTF-8;q=0.7,*;q=0.7\r\n
Keep-Alive: 115\r\n
Connection: keep-alive\r\n
X-Requested-With: XMLHttpRequest\r\n
Cookie: Some Cookies\r\n\r\n
Pod koniec nagłówka odpowiedzi HTTP, mam path=/Content-Encoding: gzip
, a następnie gziped odpowiedzi .
Próbowałem 2 podobieństw kody do dekompresji:
UPDATE: W poniższych kodów, tBytes = (the string after 'path=/Content-Encoding: gzip').getBytes();
GZIPInputStream gzip = new GZIPInputStream (new ByteArrayInputStream (tBytes));
StringBuffer szBuffer = new StringBuffer();
byte tByte [] = new byte [1024];
while (true)
{
int iLength = gzip.read (tByte, 0, 1024); // <-- Error comes here
if (iLength < 0)
break;
szBuffer.append (new String (tByte, 0, iLength));
}
A ten, który mam na tym forum:
InputStream gzipStream = new GZIPInputStream (new ByteArrayInputStream (tBytes));
Reader decoder = new InputStreamReader (gzipStream, "UTF-8");//<- I tried ISO-8859-1 and get the same exception
BufferedReader buffered = new BufferedReader (decoder);
Chyba to jest błąd kodowania.
poważaniem,
bill0ute
Witam Wim. Dzięki za odpowiedź. Zaktualizowałem wiadomość, aby wyjaśnić, w jaki sposób uzyskuję tBytes. Nie sądzę, że odpowiedź jest porwana, ponieważ istnieje nagłówek Content-Length. Ale nie jestem pewien. bill0ute – bill0ute
Witaj Wim. Próbuję użyć pakietu HttpClient, ale nie mogę znaleźć dokumentu Java. Dostaję tylko przykłady. Czy możesz podać mi przykład połączenia z gniazdem i wysłać żądanie pobrania? Dzięki – bill0ute
Zapoznaj się z samouczkiem, jest to prosty przykład uzyskania ciała odpowiedzi dla HTTP GET: http://hc.apache.org/httpclient-3.x/tutorial.html W twoim przypadku będziesz chciał przetwarzaj 'responseBody' tak jak teraz przetwarzaj' tBytes'. –