Ошибка ответа HTTP-ответа gzip: неверный заголовок - PullRequest
2 голосов
/ 12 февраля 2020

Не могу понять, что не так. ioutil.ReadAll должен использовать gzip как для других URL.

Может воспроизводить с URL: romboutskorea.co.kr

Ошибка:

gzip: неверный заголовок

Код:

resp, err := http.Get("http://" + url)
            if err == nil {
                defer resp.Body.Close()

                if resp.StatusCode == http.StatusOK {
                    fmt.Printf("HTTP Response Status : %v\n", resp.StatusCode)
                    bodyBytes, err := ioutil.ReadAll(resp.Body)
                    if err != nil {
                        fmt.Printf("HTTP Response Read error. Url: %v\n", url)
                        log.Fatal(err)
                    }
                    bodyString := string(bodyBytes)

                    fmt.Printf("HTTP Response Content Length : %v\n", len(bodyString))
                }
            }

Ответы [ 2 ]

3 голосов
/ 12 февраля 2020

Ответ этого сайта неправильный. Он требует gzip-кодирования, но фактически не сжимает содержимое. Ответ выглядит примерно так:

HTTP/1.1 200 OK
...
Content-Encoding: gzip
...
Transfer-Encoding: chunked
Content-Type: text/html; charset=euc-kr

8000
<html>
<head>
...

"8000" происходит из кодирования чанкованной передачи, но "..." - это начало тела чанкованного ответа. Очевидно, что это не сжато, несмотря на то, что заявлено так. Браузеры на самом деле работают со множеством испорченных вещей, что на самом деле не добавляет мотивации провайдерам для устранения этих проблем :( Но вы можете видеть, что curl не сможет:

$ curl -v --compressed http://romboutskorea.co.kr/main/index.php?
...
< HTTP/1.1 200 OK
< ...
< Content-Encoding: gzip
< ...
< Transfer-Encoding: chunked
< Content-Type: text/html; charset=euc-kr
< 
* Error while processing content unencoding: invalid code lengths set
* Failed writing data
* Curl_http_done: called premature == 1
* Closing connection 0
curl: (23) Error while processing content unencoding: invalid code lengths set

И так же Python :

$ python3 -c 'import requests; requests.get("http://romboutskorea.co.kr/main/index.php?")'
...
requests.exceptions.ContentDecodingError: ('Received response with content-encoding: gzip, but failed to decode it.', error('Error -3 while decompressing data: incorrect header check'))
1 голос
/ 12 февраля 2020

Я вижу

Content-Type: text/html; charset=euc-kr
Content-Encoding: gzip

Проверьте содержимое тела: как здесь , это может быть HTTP-ответ, когда тело сначала сжимается с помощью gzip, а затем кодируется с помощью кодированной передачи .

Потребуется NewChunkedReader, так как в этом примере .

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