Ruby Sinatra的HTTP PUT请求

时间:2019-01-30 11:15:10

标签: ruby rest sinatra httparty

我用Ruby为PUT请求创建了主体。当我打印出身体时,我看不到任何问题。但是,当我尝试从实际的PUT请求中打印出正文时,我开始收到错误消息。

详细来说,这是我的代码:

@data={param1: "nameserver",
       param2: {code: "XYZ", name: "NAME", start: "2017"}}

  puts "data = #{@data} " #This works fine

    @putResponse = HTTParty.put(base_url,  
                         :body => @data.to_json,
                         :headers => header)

    puts "putResponse.body is #{@putResponse.body}" #This is where I get the error

如您所见,行puts "data = #{@data} "正常工作。它打印出

data = {:param1=>"nameserver", :param2=>{:code=>"XYZ", :name=>"NAME", :start=>"2017"}}

但是该行放置puts "putResponse.body is #{@putResponse.body}"不起作用。它是打印出来的:

putResponse.body is {"errors":[{"message":"The specified resource does not exist."}],"error_report_id":443}

那么这是什么问题? (我正在使用HTTParty发出我的PUT请求)

编辑:

这是我获得主机和标头的方式:

config = JSON.parse(File.read('config.json'))
puts "config: #{config}"

access_token = config['canvas']['access_token']
puts "access_token: #{access_token}"

host = config['canvas']['host']
puts "host: #{host}"

base_url = 'http://#{host}/api/v1/users/self/custom_data/program_of_study'
puts "base_url: #{base_url}"

header = {'Authorization': 'Bearer ' "#{$access_token}", "Content-Type" => 'application/json', 'Accept' => 'application/json'}

1 个答案:

答案 0 :(得分:0)

在Sinatra中处理this.setState(prev => ({ [day]: { ...prev[day], [type]: value } }) ) 与处理PUT类似,这就是文档在这方面可能稀缺的原因。

这是Sinatra端点从POST请求中接收PUT个参数的简单示例:

curl

并使用以下curl命令对其进行测试:

# server.rb
require 'sinatra'

put '/' do
  params.inspect
end

$ curl -X PUT -d n=hello http://localhost:4567/ 哈希将可在任何Sinatra端点内使用,包括任何HTTP方法接收的参数。

作为对您的评论的回应,如果不查看整个代码就很难调试。 我建议您运行此答案中提供的测试,并逐步对其进行修改以适合您的实际代码,以了解有什么问题。

运行以上params时,以下测试可以正常运行:

server.rb