2011-01-21 52 views
17

Tôi cần tạo yêu cầu HTTP PUT bằng ruby.Ruby: PUT Yêu cầu với phần thân JSON?

Yêu cầu có một cơ thể JSON

tôi đã có thể tạo ra cơ thể JSON sử dụng:

require 'rubygems' 
require 'json' 
jsonbody = JSON.generate["message"=>"test","user"=>"user1"] 

tôi cần phải gửi yêu cầu PUT này để url:

require 'open-uri' 
url = URI.parse('http://www.data.com?access_token=123') 

Ai đó có thể cho tôi biết làm thế nào tôi có thể làm điều này trong Ruby?

Trả lời

20

Sử dụng restclient (gem install phần còn lại-client) như thế này:

require 'rubygems' 
require 'rest_client' 
require 'json' 

jdata = JSON.generate(["test"]) 
RestClient.put 'http://localhost:4567/users/123', jdata, {:content_type => :json} 

so với sinatra dịch vụ sau đây:

require 'sinatra' 
require 'json' 

put '/users/:id' do |n| 
    data = JSON.parse(request.body.read) 
    "Got #{data} for user #{n}" 
end 

wo rks trên máy tính của tôi.

4

Cách dễ nhất là với Net::HTTP:

require 'net/http' 
http = Net::HTTP.new('www.data.com') 
response = http.request_put('/?access_token=123', jsonbody)
+1

tôi nhận được lỗi: /usr/lib/ruby/1.8/net/http.rb:1060:in 'yêu cầu': phương thức chưa xác định 'đã đóng? ' cho nil: NilClass (NoMethodError) từ /usr/lib/ruby/1.8/net/http.rb:996:in 'request_put ' từ json.rb: 23 – unicornherder

+0

Yikes, không có ý tưởng. Nó hoạt động cho tôi: -/ –

+0

@dpigera đảm bảo bạn đang được xác thực chính xác. –

Các vấn đề liên quan