HTTP PUT-запрос с Руби Синатрой - PullRequest
0 голосов
/ 30 января 2019

Я создал тело для запроса PUT с Ruby.Когда я распечатываю тело, я не вижу никаких проблем.Но когда я пытаюсь распечатать тело из фактического запроса 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 голосов
/ 30 января 2019

Работа с PUT в Sinatra аналогична работе с POST - поэтому документация может быть недостаточной в этом аспекте.

Это простой пример конечной точки Sinatra, которая получает PUT аргументов из curl запроса:

# server.rb
require 'sinatra'

put '/' do
  params.inspect
end

И протестируйте его с помощью этой команды curl:

$ curl -X PUT -d n=hello http://localhost:4567/

Хеш params будет доступен вам в любой конечной точке Sinatraвключая параметры, полученные любым методом HTTP.

В ответ на ваш комментарий сложно выполнить отладку, не увидев весь ваш код.Я предлагаю вам запустить тесты, представленные в этом ответе, и постепенно изменить его, чтобы он соответствовал вашему фактическому коду, чтобы понять, что ломается.

При работающем выше server.rb следующий тест работает без ошибок:

# test.rb
require 'httparty'

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

response = HTTParty.put 'http://localhost:4567/', body: data
puts response.body
# => {"param1"=>"nameserver", "param2"=>{"code"=>"XYZ", "name"=>"NAME", "start"=>"2017"}}
...