2013-08-14 28 views
5

Không chắc chắn tại sao tôi nhận được lỗi này ngay bây giờ với đá quý Mechanize - được sử dụng nó trong một thời bây giờ không có vấn đề.Ruby Mechanize Zlib :: BufError

kịch bản của tôi sẽ ngẫu nhiên dừng lại và ném các lỗi sau:

/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) 

Bất kỳ ý tưởng?

+2

Tôi nghĩ rằng chúng ta cần phải biết nơi bạn đang nhận được dữ liệu của bạn, vì vậy cho chúng ta một URL. Chúng tôi cũng cần xem mã xử lý yêu cầu đó. –

Trả lời

5

Có thể bạn đang nhấn URL trỏ đến trình cân bằng tải. Một trong số các máy chủ lưu trữ phía sau trình cân bằng tải đó được định cấu hình sai hoặc có thể cấu hình khác biệt so với các máy ngang hàng và đang trả về phiên bản nội dung được gzip, trong đó những người khác thì không. Tôi đã nhìn thấy vấn đề đó trong quá khứ.

Tôi cũng thấy các tình huống mà máy chủ cho biết nó đã trả lại nội dung được nén, nhưng đã gửi không nén. Hoặc nó có thể được gửi nén, không gzipped. Sự kết hợp rất nhiều.

Khắc phục là đảm bảo mã của bạn có khả năng cảm nhận xem nội dung trả về có được nén hay không. Đảm bảo bạn đang gửi đúng tiêu đề HTTP nội dung có thể chấp nhận cho mã của bạn đến máy chủ của chúng. Bạn phải chương trình phòng thủ và xem xét nội dung thực tế bạn nhận được trở lại, và sau đó chi nhánh để làm giải nén đúng, sau đó vượt qua mà trên để phân tích cú pháp.

+0

Điều này hữu ích - cảm ơn bạn. Về cơ bản tôi đang tạo bot/trình thu thập dữ liệu để tạo phiên trên trang web và thực hiện một số tác vụ thay mặt cho người dùng đã đăng nhập. Hầu hết các yêu cầu của tôi là POST bằng cách sử dụng Cơ chế hóa, nhưng có vẻ như lỗi xảy ra với một trong các yêu cầu GET. Có lẽ tôi sẽ khai báo các tiêu đề một cách rõ ràng trái với việc chỉ sử dụng 'a.get' và xem nó như thế nào. – abhir

+0

Bạn cần xác định tiêu đề. Nếu không có chúng, bạn đang ở trong ý thích của các nhà phát triển của hệ thống đó. Với họ, tốt, ít nhất bạn đã làm điều đúng. –

+0

Hoàn hảo - giải quyết nó. Cảm ơn! – abhir

4

tôi đã có thể làm được việc này bằng cách thiết lập các tiêu đề yêu cầu như sau:

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

+1

Điều đó cũng cố định cho tôi, mặc dù tôi không biết tại sao –

Các vấn đề liên quan