2013-08-14 18 views
5

Nie wiem, dlaczego dostaję teraz ten błąd za pomocą klejnotu Mechanize - używam go już od jakiegoś czasu bez żadnych problemów.Ruby Mechanize Zlib :: BufError

Mój skrypt losowo zatrzymać i rzucić się następujący błąd:

/Users/username/.rvm/gems/ruby-1.9.3-p194/gems/mechanize-2.5.1/lib/mechanize/http/agent.rb:798:in `rescue in response_content_encoding': error handling content-encoding gzip: buffer error (Zlib::BufError) (Mechanize::Error) 

jakieś pomysły?

+2

myślę, że musimy wiedzieć, gdzie jesteś odbierania danych, więc daje nam adres URL. Musimy również zobaczyć kod, który obsługuje to żądanie. –

Odpowiedz

5

Możliwe, że trafiasz na adres URL wskazujący na równoważenie obciążenia. Jeden z hostów znajdujących się za równoważeniem obciążenia jest źle skonfigurowany lub może być skonfigurowany jako inaczej niż niż jego rówieśnicy i zwraca zwięźle wersję treści, gdzie inni nie. Widziałem ten problem w przeszłości.

Widziałem również sytuacje, w których serwer powiedział, że zwracał spakowaną zawartość, ale wysłał ją nieskompresowaną. Lub może być wysyłane zip, a nie gzipowane. Kombinacje są liczne.

Rozwiązaniem jest upewnienie się, że twój kod jest w stanie wykryć, czy zwrócona zawartość jest skompresowana. Upewnij się, że wysyłasz również prawidłowe nagłówki HTTP z odpowiednim kodem do swojego serwera. Musisz zaprogramować defensywnie i przyjrzeć się faktycznej zawartości, którą otrzymujesz, a następnie oddziałać, aby wykonać odpowiednią dekompresję, a następnie przekazać ją do analizy.

+0

To jest pomocne - dziękuję. Zasadniczo tworzę bota/robot, który tworzy sesję na stronie i wykonuje określone działania w imieniu zalogowanego użytkownika. Większość moich żądań to POST z użyciem mechanizmu, ale wygląda na to, że błąd dotyczy jednego z żądań GET. Być może jawnie ogłoszę nagłówki, a nie po prostu używając 'a.get' i zobaczę, jak to działa. – abhir

+0

Musisz zdefiniować nagłówki. Bez nich jesteś na kaprys twórców tego systemu. Z nimi, cóż, przynajmniej zrobiłeś to, co trzeba. –

+0

Perfect - rozwiązany. Dzięki! – abhir

4

udało mi się obejść ten problem przez ustawienie nagłówków żądania tak:

mechanize.request_headers = { "Accept-Encoding" => "" }

+1

To również dla mnie, choć nie mam pojęcia, dlaczego –