सवाल मैं HTTParty के साथ त्रुटियों को कैसे संभाल सकता हूं?


मैं HTTP अनुरोध करने के लिए HTTParty का उपयोग कर रेल अनुप्रयोग पर काम कर रहा हूं। मैं HTTP त्रुटियों के साथ HTTP त्रुटियों को कैसे संभाल सकता हूं? विशेष रूप से, मुझे HTTP 502 और 503 और अन्य त्रुटियों जैसे कनेक्शन अस्वीकृत और टाइमआउट त्रुटियों को पकड़ने की आवश्यकता है।


62
2017-10-26 22:15


मूल




जवाब:


का एक उदाहरण HTTParty :: रिस्पांस एक code विशेषता जिसमें HTTP प्रतिक्रिया का स्टेटस कोड होता है। इसे एक पूर्णांक के रूप में दिया जाता है। तो, इस तरह कुछ:

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

83
2017-10-26 22:46



धन्यवाद! यही वह है जो मैं करने की योजना बना रहा था। यह सोच रहा था कि त्रुटि प्रबंधन करने का कोई अन्य तरीका है या नहीं। - preethinarayan
यह उत्तर कनेक्शन विफलताओं को संबोधित नहीं करता है। - gtd
प्रीथिनारायण की टिप्पणी के रूप में, यदि आप इसके बजाय त्रुटियों को पकड़ना / बचाव करना चाहते हैं, तो आप हमेशा ऐसा कुछ कर सकते हैं: अगर प्रतिक्रिया.code! = 200 मैं blablahblah उठाता हूं तो मैं वास्तव में कुछ ऐसा करने जा रहा हूं ... - user435779
अगर प्रतिक्रिया में त्रुटि को संभाला जाता है तो प्रतिक्रिया.code हमेशा 200 लौटाता है। इससे कैसे निपटें ?? - Infant Dev


यह उत्तर कनेक्शन विफलताओं को संबोधित करता है। यदि कोई यूआरएल नहीं मिला है तो स्टेटस कोड आपकी मदद नहीं करेगा। इसे इस तरह से बचाओ:

 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

अधिक जानकारी के लिए देखें: यह जिथब मुद्दा


24
2017-11-05 22:08



सब कुछ पकड़ो मत। आपको पकड़ना चाहिए HTTPartyएस त्रुटि बेस वर्ग। - Oleander
शायद HTTParty कोड में त्रुटियों को पकड़ने का विचार है। HTTParty त्रुटियों को बढ़ा सकता है जो नहीं हैं HTTParty::Errors। - B Seven
यदि कोई नेटवर्क नहीं है तो मुझे एक मिलता है SocketError, बस ऐसा कुछ जिसके बारे में अवगत होना चाहिए। ऐसा करने के लिए आप अपने ईथरनेट केबल को अनप्लग करने का प्रयास कर सकते हैं। - Kris


आप इस तरह के आसान भविष्यवाणियों के तरीकों का भी उपयोग कर सकते हैं success? या bad_gateway? इस तरह:

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

संभावित प्रतिक्रियाओं की पूरी सूची नीचे मिल सकती है Rack::Utils::SYMBOL_TO_STATUS_CODE लगातार।


11
2018-06-22 03:17