如何使用RestClient发送POST请求中的数据

7

我试图使用RestClient Ruby gem来模拟一个curl请求,但是至今仍然很难发送负载数据。我的curl请求看起来像这样:

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

我一直在尝试使用以下代码来复制它:

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

然而,每次执行代码时都会出现400-Bad Requests错误。我该如何正确地发送数据?是否应该使用payload之外的其他内容?

3个回答

9

修改:

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

致:

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"}
                           )

cURL 工作正常。我想知道如何使用 RestClient 进行等效的查询。 - rboling
感谢您的帮助!最终,我不得不传递一个参数来澄清我的数据是以JSON格式发送的。 - rboling
是的,你还有一个问题,就是你的payload不是字符串,而是哈希。我的回答解决了这个问题。另外,如果它仍然无法工作,那么我会告诉你添加headers选项到请求中。但你已经做到了,这很棒 :) - K M Rakibul Islam
我认为你需要将payload: '{"param_1" => "1"}'切换为payload: '{"param_1" : "1"}'。如果你改变了它,我会接受你的答案! - rboling
让我们在聊天中继续这个讨论 - K M Rakibul Islam
虽然这两种方式是相同的,只是使用了不同的哈希语法,而且两种方式都可以工作, 但我改成了 payload: '{"param_1" : "1"}',这是最新的 Ruby 哈希语法。 - K M Rakibul Islam

4

只需改变:

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

致:

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"}
                           )

1
原来我需要添加一个参数来指定我的数据是JSON格式的。正确的答案应该像这样:RestClient::Request.execute(method: :post, url: URL, user: API_KEY, payload: '{"param_1": "1"}', headers: {"Content-Type" => "application/json"})

你本可以勾选@K M Rakibul Islam的答案;Rboling - Shiva

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接