Ruby:带有 JSON 正文的 PUT 请求?

Posted

技术标签:

【中文标题】Ruby:带有 JSON 正文的 PUT 请求?【英文标题】:Ruby: PUT Request with JSON body? 【发布时间】:2011-06-13 08:22:47 【问题描述】:

我需要使用 ruby​​ 创建一个 HTTP PUT 请求

请求具有 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 中做到这一点?

【问题讨论】:

【参考方案1】:

像这样使用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

在我的电脑上工作。

【讨论】:

【参考方案2】:

最简单的方法是Net::HTTP:

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

【讨论】:

我收到错误:/usr/lib/ruby/1.8/net/http.rb:1060:in request': undefined method closed?'对于 nil:NilClass (NoMethodError) 来自 /usr/lib/ruby/1.8/net/http.rb:996:in `request_put' 来自 json.rb:23

以上是关于Ruby:带有 JSON 正文的 PUT 请求?的主要内容,如果未能解决你的问题,请参考以下文章

Spring Rest Controller PUT 方法请求正文验证?

是否可以在 Axios 中发送带有 JSON 正文的 get 请求?

带有 JSON 正文的 POST 请求

如何在 Restkit 中执行没有正文、url 参数的 PUT 请求并取回对象

带有标头和原始 json 正文的 Volley POST 请求

如何在 Alamofire 中请求带有正文和标头的 JSON?