Как отправить данные в почтовом запросе с помощью RestClient

Я пытаюсь имитировать запрос на завивание с помощью драгоценного камня RestClient Ruby, и до сих пор у меня было много проблем с попыткой отправить полезную нагрузку. Мой запрос на завивку выглядит примерно так

curl URL -X POST -u API_KEY -d '{"param_1": "1"}'

Я пытался воспроизвести это с помощью RestClient, используя что-то вроде этого:

RestClient::Request.execute(method: :post, url: URL, user: API_KEY, payload: {"param_1" => "1"})

Увы, при этом я продолжаю получать ошибки 400 - Bad Requests. Я отправляю данные по неправильному пути? Должен ли я использовать что-то кроме полезной нагрузки?


person rboling    schedule 25.10.2015    source источник


Ответы (3)


Изменять:

payload: {"param_1" => "1"})

To:

payload: '{"param_1": "1"})'

Также укажите headers.

Итак, получается:

RestClient::Request.execute(method: :post,
                            url: 'your_url',
                            user: 'API_KEY',
                            payload: '{"param_1": "1"}',
                            headers: {"Content-Type" => "application/json"}
                           )
person K M Rakibul Islam    schedule 25.10.2015
comment
С cURL все работает нормально. Мне любопытно, как бы я сделал эквивалентный запрос с RestClient - person rboling; 25.10.2015
comment
Спасибо за помощь! В конце концов, мне пришлось передать аргумент, чтобы уточнить, что мои данные отправляются в формате JSON. - person rboling; 25.10.2015
comment
Да, у вас была другая проблема: ваш payload был не строкой, а хешем. Мой ответ касался этой проблемы. Также, если бы это не сработало, то я бы посоветовал вам добавить в запрос опцию headers. Но вы это уже сделали, и это здорово :) - person K M Rakibul Islam; 25.10.2015
comment
Я думаю, вам нужно переключить полезную нагрузку: '{param_1 => 1}' на полезную нагрузку: '{param_1 : 1}'. Если вы измените это, я приму ваш ответ! - person rboling; 25.10.2015
comment
Давайте продолжим обсуждение в чате. - person K M Rakibul Islam; 25.10.2015
comment
Хотя эти два одинаковы, они используют разный синтаксис хэша, и оба должны работать, но я изменил на payload: '{"param_1" : "1"}', который является последним синтаксисом рубинового хэша. - person K M Rakibul Islam; 25.10.2015

Просто изменить:

payload: {"param_1" => "1"}

To:

payload: {"param_1" => "1"}.to_json

Итак, тогда получается:

RestClient::Request.execute(method: :post,
                            url: 'your_url',
                            user: 'API_KEY',
                            payload: {"param_1" => "1"}.to_json,
                            headers: {"Content-Type" => "application/json"}
                           )
person Irfan Ahmad    schedule 10.03.2016

Оказывается, мне пришлось добавить аргумент, чтобы указать, что мои данные были в формате JSON. Правильный ответ был примерно таким: RestClient::Request.execute(method: :post, url: URL, user: API_KEY, payload: '{"param_1": "1"}', headers: {"Content-Type" => "application/json"})

person rboling    schedule 25.10.2015
comment
вы могли бы отметить ответ @K M Rakibul Islamic; Рболинг - person illusionist; 25.10.2015