2011-01-21 12 views
17

Devo creare una richiesta PUT HTTP utilizzando ruby.Ruby: PUT Request con corpo JSON?

La richiesta ha un corpo JSON

sono stato in grado di generare il corpo JSON utilizzando:

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

ho bisogno di inviare questa richiesta PUT alla url:

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

Qualcuno può dirmi come posso farlo in Ruby?

risposta

20

Utilizzando restclient (gem install resto-client) come questo:

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

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

contro il seguente sinatra servizio:

require 'sinatra' 
require 'json' 

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

wo rks sul mio computer.

4

modo più semplice è con Net::HTTP:

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

ho ricevuto l'errore: /usr/lib/ruby/1.8/net/http.rb:1060:in 'richiesta ': metodo non definito' chiuso?' per nil: NilClass (NoMethodError) da /usr/lib/ruby/1.8/net/http.rb:996:in 'request_put ' da json.rb: 23 – unicornherder

+0

Yikes, nessuna idea. Funziona per me: -/ –

+0

@dpigera assicurati di essere autenticato correttamente. –

Problemi correlati