Ruby Gem Rest-клиент против cURL, HTTP 415

#ruby-on-rails #ruby #rest #curl #http-status-code-415

#ruby-on-rails #ruby #rest #curl #http-status-code-415

Вопрос:

У меня есть вызов cURL, который работает, но когда я перевожу его с помощью Ruby Gem rest-client, я получаю:

RestClient::UnsupportedMediaType: 415 Неподдерживаемый тип носителя

Вот cURL, который я использовал, который работал:

 curl 
-X POST 
-H "Content-Type:application/json" 
-H "Authorization: Bearer MY_TOKEN" 
-H "Amazon-Advertising-API-Scope: MY_SCOPE" 
-d '{"campaignType":"sponsoredProducts","reportDate":"20161013","metrics":"impressions,clicks,cost"}' 
https://advertising-api.amazon.com/v1/productAds/report
 

Вот Ruby, который возвращает статус HTTP 415:

 yesterday = Date.today - 1
RestClient::Request.execute(
  method:  :post,
  url:     'https://advertising-api.amazon.com/v1/productAds/report',
  headers:
  {
    'Content-Type'                 => 'application/json',
    'Authorization'                => "Bearer #{ENV['AD_ACCESS_TOKEN']}",
    'Amazon-Advertising-API-Scope' => ENV['AD_PROFILE_ID']
  },
  payload:
  {
    'campaignType' => 'sponsoredProducts',
    'reportDate' => "#{yesterday.year}#{yesterday.month}#{yesterday.day}",
    'metrics' => 'impressions,clicks,cost'
  }
)
 

Ответ №1:

Хэш полезной нагрузки необходимо было преобразовать в JSON.

 ...
payload:
{
  ...
}.to_json
...