2010-08-23 8 views
13

पोस्ट के बाद प्रतिक्रिया यूआरएल या आईडी प्राप्त करें, मुझे पोस्ट करने के बाद एक अलग स्क्रिप्ट में httparty के साथ रेल प्रोजेक्ट से प्रतिक्रिया यूआरएल या आईडी कैसे प्राप्त हो सकता है?रूबी httparty

रूबी स्क्रिप्ट:

HTTParty.post('http://localhost:3000/change_logs', parameters) 

response.body और अन्य सभी लोगों यूआरएल और प्रतिक्रिया आईडी

उत्तर

-1

यह मेरे लिए काम करता .. वहाँ शायद हालांकि यह करने के लिए एक बेहतर तरीका है,

get_change_log_id = HTTParty.post('http://localhost:3000/change_logs.xml', parameters).to_a 

get_change_log_id.each do |r| 
    r.each do |sub| 
    sub2 = sub.to_a 
     sub2.each do |s| 
     if s.index "id" 
      @change_log_id = s.to_s.sub(/[i]/, '').sub(/[d]/, '') 
     end 
     end 
    end 
end 
+0

हाँ वहाँ एक आसान तरीका था - प्रतिक्रिया के लिए

url = "http://example.com/redirects/to/www" response = HTTParty.get(url) response.request.last_uri.to_s # => "http://www.example.com" 
nictrix

3

दुर्भाग्य से, कि जानकारी HTTParty द्वारा रखा नहीं है नहीं दिखाते। जब इसे रीडायरेक्ट का सामना करना पड़ता है, तो यह रीडायरेक्ट का पालन करेगा और उस अनुरोध के परिणाम को वापस कर देगा। यह मूल अनुरोध से किसी भी जानकारी को सहेज नहीं पाएगा।

अच्छी खबर यह है कि इस तरह का व्यवहार (आमतौर पर) अनुमानित है। वेब ऐप्स आमतौर पर एक यूआरएल के पोस्ट अनुरोध के बाद एक ही चीजों पर रीडायरेक्ट करते हैं।

लेकिन यदि आप वास्तव में ऐसा करना चाहते हैं, तो आपको रूबी के साथ आने वाली नेट/http लाइब्रेरी का उपयोग करना होगा। हालांकि यह HTTParty से कहीं अधिक कठिन नहीं है, इसलिए यह अधिक काम नहीं है।

+2

धन्यवाद, कि समझ में आता है rty.post ('http: // localhost: 3000/change_logs.xml', पैरामीटर) change_log_id = results.parsed_response ["change_log"]। value_at ("id") – nictrix

26

दो साल बाद, मैं response पर request विशेषता से पिछले यूआरआई तक पहुँचने के लिए एक रास्ता मिल गया:

परिणाम = HTTPa: .. लेकिन मैं यह करने के लिए एक तरह से यह पता लगाने में किया था यह हालांकि एक छोटे से अजीब है
+3

यदि आप इसे प्राप्त किए बिना ऐसा करना चाहते हैं अंतिम गंतव्य का शरीर। यानी यदि आप केवल अंतिम यूआरएल प्राप्त करना चाहते हैं, तो आप 'HTTParty.get' कॉल को 'HTTParty.head (url, {: maintain_method_across_redirects => true}) से प्रतिस्थापित कर सकते हैं। –