2014-05-13 13 views
5

मैं rest-client मणि के साथ 400 प्रतिक्रिया के शरीर को पढ़ने की कोशिश कर रहा हूं। समस्या यह है कि rest-client इसे एक त्रुटि के रूप में फेंककर 400 का जवाब देता है, इसलिए मैं शरीर के पाठ को प्राप्त करने के किसी भी तरीके से नहीं समझ सकता।400 प्रतिक्रिया के शरीर को पढ़ना?

यहां प्रेरक उदाहरण है। फेसबुक ग्राफ एपीआई को यह कॉल पर विचार करें:

  1. एक 400 गलत अनुरोध HTTP प्रतिसाद
  2. रिटर्न JSON रिटर्न जवाब में:

    JSON.parse(RestClient.get("https://graph.facebook.com/me?fields=id,email,first_name,last_name&access_token=#{access_token}")) 
    

    तो access_token की अवधि समाप्त हो या अमान्य है, फेसबुक दो बातें करता है अधिक जानकारी के साथ शरीर, इस तरह:

{ 
    "error": { 
     "message": "The access token could not be decrypted", 
     "type": "OAuthException", 
     "code": 190 
    } 
} 

क्योंकि 400 प्रतिक्रिया एक त्रुटि उठाती है, मैं यह नहीं समझ सकता कि प्रतिक्रिया के शरीर को कैसे प्राप्त किया जाए। यही है, उदाहरण के लिए, यदि मैं कर्ल में या मेरे ब्राउज़र में जीईटी अनुरोध चलाता हूं, तो मैं शरीर को देख सकता हूं, लेकिन मैं यह नहीं समझ सकता कि इसे कैसे आराम से पहुंचाया जा सकता है।

begin 
    fb_response = JSON.parse(RestClient.get("https://graph.facebook.com/me?fields=id,email,first_name,last_name&access_token=#{access_token}")) 
rescue => e 
    # 400 response puts me here 
    # How can I get the body of the above response now, so I can get details on the error? 
    # eg, was it an expired token? A malformed token? Something else? 
end 

उत्तर

13

से rest-client documentation: यहाँ एक उदाहरण है

अपवाद

अन्य मामलों के लिए

, एक RestClient :: अपवाद रिस्पांस पकड़े बढ़ा दी जाएगी; एक विशिष्ट अपवाद वर्ग ज्ञात त्रुटि कोड

begin 
    RestClient.get 'http://example.com/resource' 
rescue => e 
    e.response 
end 

के लिए फेंक दिया जाएगा आप की तरह अपने कोड को फिर से लिखने कर सकते हैं:

body = begin 
    RestClient.get("https://graph.facebook.com/me?fields=id,email,first_name,last_name&access_token=#{access_token}") 
rescue => e 
    e.response.body 
end 
fb_response = JSON.parse(body) 

या बस RestClient::Exception#http_body का उपयोग अपवाद से प्रतिक्रिया शरीर पाने के लिए। (यह सिर्फ एक शॉर्टकट है)।

संबंधित मुद्दे