使用cURL的POST请求发送JSON到Sinatra

8
我使用Sinatra创建了一个简单的API,可以根据提交的JSON数据发送电子邮件。我可以创建一个表单,通过该表单提交JSON数据,并访问params以获取电子邮件的收件人、主题和正文。然而,我正在尝试使用cURL测试API,但似乎无法使其正常工作。我认为我的cURL请求格式有问题。以下是我尝试过的cURL请求、params的输出以及使用JSON gem解析params的尝试。
我倾向于使用一个包含我的JSON数据字符串值为空的巨大键来获取params。我尝试添加Content-Type:application/json,当我这样做时,params为空。
curl -X POST -H "Accept: application/json" -d '{ "to": "Brantley <test@gmail.com>", "subject": "hello world", "body": "Hi Jennifer! Sending you an email via this API I just made." }' http://localhost:9393/send-email

这里是返回的参数哈希表...
{"{ \"to\": \"Brantley <test@gmail.com>\", \"subject\": \"hello world\", \"body\": \"Hi Jennifer! Sending you an email via this API I just made.\" }"=>nil}

我尝试将其转换为更有用的JSON参数,然后得到以下结果...

{\"{ \\\"to\\\": \\\"Brantley <test@gmail.com>\\\", \\\"subject\\\": \\\"hello world\\\", \\\"body\\\": \\\"Hi Jennifer! Sending you an email via this API I just made.\\\" }\":null}"

我已经花了一整天的时间来解决这个问题,阅读了20篇关于类似问题的stackoverflow帖子,但仍然无法解决。如果有任何建议,将不胜感激。谢谢!


curl 命令乍一看似乎没问题。但是如果没有看到 Sinatra 代码,我们无法帮助您。请提供一个最小化的示例以展示问题。 - Patrick Oscity
我懂了...不需要玩弄参数。通过以下操作,我可以将JSON有效载荷作为哈希值获取...payload = JSON.parse(request.body.read) - Brantley Beaird
请在下方添加答案并标记为已接受。谢谢! - Patrick Oscity
1个回答

12

我明白了...不需要玩弄参数。我可以通过以下方式将JSON负载作为哈希获取...

payload = JSON.parse(request.body.read)

Rack contrib 模块 Rack::PostBodyContentTypeParser 也可以为您完成这个任务。当 Content-Type 是 application/json 时,Rack 参数哈希表会通过反序列化请求体中提供的 JSON 数据来填充。请参见 https://github.com/rack/rack-contrib。 - nateware

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