2012-10-31 19 views
19

मैं कस्टम हेडर के साथ एक वेब सेवा के लिए अनुरोध भेज रहा हूं।रूबी में नेट द्वारा HTTP पोस्ट अनुरोध भेजना :: HTTP

require 'uri' 
require 'net/http' 

uri = URI("https://api.site.com/api.dll") 
https = Net::HTTP.new(uri.host, uri.port) 
https.use_ssl = true 
headers = 
{ 
    'HEADER1' => "VALUE1", 
    'HEADER2' => "HEADER2" 
} 

response = https.post(uri.path, headers) 
puts response 

यह काम नहीं कर रहा है, मैं की एक त्रुटि प्राप्त कर रहा हूँ: मैं इस का समाधान कैसे करते

/usr/lib/ruby/1.9.1/net/http.rb:1932:in `send_request_with_body': undefined method `bytesize' for #<Hash:0x00000001b93a10> (NoMethodError) 

?

पीएस Ruby 1.9.3

उत्तर

12

Net::HTTP#post का दूसरा तर्क String होना चाहिए जिसमें डेटा पोस्ट करने के लिए डेटा होता है (अक्सर डेटा बनाते हैं), हेडर वैकल्पिक तीसरे तर्क में होंगे।

+9

तो, यहां कामकाजी कोड क्या है? – rh4games

7

इस प्रयास करें:

विस्तृत प्रलेखन के लिए, इस पर एक नज़र डालें: http://www.rubyinside.com/nethttp-cheat-sheet-2940.html

require 'uri' 
require 'net/http' 

uri = URI("https://api.site.com/api.dll") 
https = Net::HTTP.new(uri.host, uri.port) 
https.use_ssl = true 

request = Net::HTTP::Post.new(uri.path) 

request["HEADER1"] = 'VALUE1' 
request["HEADER2"] = 'VALUE2' 

response = https.request(request) 
puts response 
+0

मैं इसके साथ एक जेसन बॉडी कैसे पोस्ट कर सकता हूं?> –

+1

'data = {" aaa "=>" 111 "} .to_json; request.body = "[# {data}]" ' –

0

उल्लेख qqx के रूप में, Net::HTTP#post जरूरतों का दूसरा तर्क एक String

होने के लिए सौभाग्य से वहाँ एक साफ फ़ंक्शन जो हैश को आवश्यक स्ट्रिंग में परिवर्तित करता है:

response = https.post(uri.path, URI.encode_www_form(headers)) 
संबंधित मुद्दे