2011-01-21 13 views
17

Necesito crear una solicitud HTTP PUT usando ruby.Ruby: ¿PUT Request with JSON body?

La solicitud tiene un cuerpo JSON

yo era capaz de generar el cuerpo JSON usando:

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

Necesito enviar esta solicitud PUT a la url:

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

¿Puede alguien decirme cómo puedo hacer esto en Ruby?

Respuesta

20

Usando restclient (joya instalar resto-cliente) así:

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

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

contra la sinatra servicio siguiente:

require 'sinatra' 
require 'json' 

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

wo está en mi computadora.

4

La manera más fácil es con Net::HTTP:

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

recibo el error: /usr/lib/ruby/1.8/net/http.rb:1060:in 'request ': método indefinido' cerrado?' para nil: NilClass (NoMethodError) de /usr/lib/ruby/1.8/net/http.rb:996:in 'request_put ' de json.rb: 23 – unicornherder

+0

Yikes, no tengo idea. Funciona para mí: -/ –

+0

@dpigera asegúrese de que está siendo autenticado correctamente. –

Cuestiones relacionadas