Как получить исходный код страницы с кодировкой содержимого gzip с использованием httpClient? - PullRequest
2 голосов
/ 20 июля 2011

Я использую commons-httpclient 3.1 для чтения html-страницы.Он работает нормально со всеми, кроме страниц с кодировкой содержимого как gzipЯ получаю неполный исходный код страницы.

Для этой страницы Firefox показывает кодировку содержимого в виде gzip.

Ниже приведены подробности

Заголовок ответа:

status code: HTTP/1.1 200 OK
Date = Wed, 20 Jul 2011 11:29:38 GMT
Content-Type = text/html; charset=UTF-8
X-Powered-By = JSF/1.2
Set-Cookie = JSESSIONID=Zqq2Tm8V74L1LJdBzB5gQzwcLQFx1khXNvcnZjNFsQtYw41J7JQH!750321853; path=/; HttpOnly
Transfer-Encoding = chunked
Content- length =-1

Мой код для чтения ответа:

HttpClient httpclient = new HttpClient();
            httpclient.getParams().setParameter("http.connection.timeout",
                    new Integer(50000000));
            httpclient.getParams().setParameter("http.socket.timeout",
                    new Integer(50000000));


        // Create a method instance.
        GetMethod method = new GetMethod(url);



        // Provide custom retry handler is necessary
        method.getParams().setParameter(HttpMethodParams.RETRY_HANDLER,
                new DefaultHttpMethodRetryHandler(3, false));
        BufferedReader reader = null;
            // Execute the method.
            int statusCode = httpclient.executeMethod(method);

            if (statusCode != HttpStatus.SC_OK) {
                System.err.println("Method failed: "
                        + method.getStatusLine());
                strHtmlContent = null;
            } else {


                InputStream is = method.getResponseBodyAsStream();
                reader = new BufferedReader(new InputStreamReader(is,"ISO8859_8"));
                String line = null;
                StringBuffer sbResponseBody = new StringBuffer();
                while ((line = reader.readLine()) != null) {
                    sbResponseBody.append(line).append("\n");
                }
                strHtmlContent = sbResponseBody.toString();

Ответы [ 2 ]

1 голос
/ 04 июня 2012

Я только что столкнулся с этой проблемой, которую решил следующим образом:

    URL url = new URL("http://www.megadevs.com");
    HttpURLConnection conn = (HttpURLConnection) url.openConnection();

    GZIPInputStream gzip = new GZIPInputStream(conn.getInputStream());
    int value = -1;
    String page = "";

    while ((value = gzip.read()) != -1) {
        char c = (char) value;
        page += c;
    }
    gzip.close();

Надеюсь, это поможет.

1 голос
/ 20 июля 2011

Обновление до httpclient 4.1.Он должен поддерживать сжатие без проблем.

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