2012-10-31 10 views
19

Tôi đang gửi yêu cầu có tiêu đề tùy chỉnh tới dịch vụ web.Gửi yêu cầu bài đăng http trong Ruby by Net :: 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 

Nó không làm việc, tôi nhận được một lỗi của:

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

Làm thế nào để giải quyết này?

P.S. Ruby 1.9.3

Trả lời

12

Đối số thứ hai của Net::HTTP#post cần phải là String chứa dữ liệu để đăng (thường là dữ liệu biểu mẫu), tiêu đề sẽ nằm trong đối số thứ ba tùy chọn.

+9

Vì vậy, mã hoạt động ở đây là gì? – rh4games

7

Hãy thử điều này:

Đối với tài liệu chi tiết, hãy xem này: 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

Làm cách nào để đăng nội dung json bằng cách này?> –

+1

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

0

Như qqx đề cập, đối số thứ hai của Net::HTTP#post nhu cầu trở thành một String

May mắn có một hàm gọn gàng chuyển đổi băm thành chuỗi được yêu cầu:

response = https.post(uri.path, URI.encode_www_form(headers))