2011-10-26 33 views
58

Tôi đang làm việc trên ứng dụng Rails sử dụng HTTParty để thực hiện các yêu cầu HTTP. Làm thế nào tôi có thể xử lý các lỗi HTTP với HTTParty? Cụ thể, tôi cần phải nắm bắt HTTP 502 & 503 và các lỗi khác như lỗi kết nối bị từ chối và hết thời gian chờ.Làm cách nào để xử lý lỗi với HTTParty?

Trả lời

76

Ví dụ HTTParty::Response có thuộc tính code chứa mã trạng thái của phản hồi HTTP. Nó được đưa ra như một số nguyên. Vì vậy, một cái gì đó như thế này:

response = HTTParty.get('http://twitter.com/statuses/public_timeline.json') 

case response.code 
    when 200 
    puts "All good!" 
    when 404 
    puts "O noes not found!" 
    when 500...600 
    puts "ZOMG ERROR #{response.code}" 
end 
+0

Cảm ơn! Đó là những gì tôi định làm. Đã tự hỏi nếu có cách nào khác để xử lý lỗi. – preethinarayan

+36

Câu trả lời này không giải quyết được lỗi kết nối. – gtd

+2

Như để bình luận của preethinarayan, nếu bạn muốn nắm bắt/giải cứu các lỗi thay vào đó, bạn luôn có thể làm điều gì đó như: tăng blablahblah nếu response.code! = 200 Tôi thực sự sẽ làm điều gì đó tương tự .. – user435779

20

Câu trả lời này giải quyết lỗi kết nối. Nếu URL không tìm thấy mã trạng thái sẽ không giúp bạn. Cứu nó như thế này:

begin 
    HTTParty.get('http://google.com') 
rescue HTTParty::Error 
    # don´t do anything/whatever 
rescue StandardError 
    # rescue instances of StandardError, 
    # i.e. Timeout::Error, SocketError etc 
end 

Để biết thêm thông tin xem: this github issue

+8

Không bao giờ bắt được mọi thứ. Bạn nên bắt lớp cơ sở lỗi 'HTTParty'. – Oleander

+0

Có thể ý tưởng là bắt lỗi trong mã HTTParty. HTTParty có thể làm tăng các lỗi không phải là 'HTTParty :: Errors'. –

+1

Nếu không có mạng nào cả, tôi nhận được một 'SocketError', chỉ cần một cái gì đó để nhận thức được. Bạn có thể thử rút cáp ethernet để xem điều này xảy ra. – Kris

9

Bạn cũng có thể sử dụng phương pháp ngữ tiện dụng như success? hoặc bad_gateway? theo cách này:

response = HTTParty.post(uri, options) 
p response.success? 

danh sách đầy đủ của phản ứng có thể có thể được tìm thấy dưới Net::HTTPResponse::CODE_TO_OBJ không đổi.

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