Ruby: запрос PUT с телом JSON? - PullRequest
17 голосов
/ 21 января 2011

Мне нужно создать HTTP PUT-запрос с использованием ruby.

У запроса есть тело JSON

Мне удалось сгенерировать тело JSON с помощью:

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

Мне нужно отправить этот запрос PUTна URL:

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

Может кто-нибудь сказать, пожалуйста, как я могу сделать это в Ruby?

Ответы [ 2 ]

20 голосов
/ 22 января 2011

Использование restclient ( gem install rest-client ) примерно так:

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

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

против следующей службы sinatra :

require 'sinatra'
require 'json'

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

работает на моем компьютере.

4 голосов
/ 21 января 2011

Самый простой способ с Net::HTTP:

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