как распаковать http ответ? - PullRequest
0 голосов
/ 30 июня 2009

Может кто-нибудь из вас решить эту проблему!

Описание проблемы:

Я получил кодировку содержимого: заголовок gzip с веб-сервера http. Теперь я хочу декодировать содержимое, но когда я использую классы GZIP из jdk 1.6.12, он дает ноль.

означает ли это, что содержимое не в формате gzip? или есть другие классы для распаковки содержимого ответа http?

Пример кода:

System.out.println("Reading InputStream");
InputStream in = httpuc.getInputStream();// httpuc is an object of httpurlconnection<br>
System.out.println("Before reading GZIP inputstream");
System.out.println(in);
GZIPInputStream gin = new GZIPInputStream(in));
System.out.println("After reading GZIP inputstream");

Выход:

Reading InputStream
Before reading GZIP inputstream
sun.net.www.protocol.http.HttpURLConnection$HttpInputStream@8acf6e
null

Я обнаружил одну ошибку в коде, но не могу ее правильно понять. на что это указывает.

Ошибка! java.io.EOFException

Спасибо

Ответы [ 3 ]

4 голосов
/ 30 июня 2009

Я думаю, вам стоит взглянуть на HTTPClient , который решит многие проблемы HTTP для вас. В частности, он позволяет получить доступ к ответу body , который может быть разархивирован, а затем просто передать его через GZIPInputStream

, например

    Header hce = postMethod.getResponseHeader("Content-Encoding");
    InputStream in = null;
    if(null != hce)
    {
     if(hce.getValue().equals(GZIP)) {
        in = new GZIPInputStream(postMethod.getResponseBodyAsStream());
     }
         // etc...
1 голос
/ 10 января 2016
    InputStream is = con.getInputStream();
    InputStream bodyStream = new GZIPInputStream(is);
    ByteArrayOutputStream outStream = new ByteArrayOutputStream();
    byte[] buffer = new byte[4096];
    int length;
    while ((length = bodyStream.read(buffer)) > 0) {
        outStream.write(buffer, 0, length);
    }

    String body = new String(outStream.toByteArray(), "UTF-8");
1 голос
/ 30 июня 2009

Я второе предложение Брайана. Всякий раз, когда вам нужно иметь дело с получением / публикацией материалов по HTTP, не беспокойтесь о низкоуровневом доступе, используйте HTTP-клиент Apache.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...