【问题标题】:Sending JSON via cURL POST request to Sinatra通过 cURL POST 请求向 Sinatra 发送 JSON
【发布时间】:2014-07-28 07:12:17
【问题描述】:

我用 Sinatra 创建了一个简单的 API,它根据提交的 JSON 数据发送电子邮件。我可以创建一个表单,通过表单提交 JSON 数据,并访问参数以获取电子邮件的收件人、主题和正文。但是,我正在尝试使用 cURL 来测试 API,但似乎无法正常工作。我假设我在 cURL 请求中的格式被破坏了。下面是我尝试过的 cURL 请求以及 params 的输出,以及尝试使用 JSON gem 解析 params。

我倾向于使用一个巨大的键来获取参数,该键是我的 JSON 数据字符串,值为 nil。我尝试添加 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 代码,我们将无法帮助您。请整理一个展示问题的最小示例。
  • 我明白了...没必要用参数胡闹。我可以通过执行以下操作将 JSON 有效负载作为哈希值... payload = JSON.parse(request.body.read)
  • 请在下方添加答案并标记为已接受。谢谢!

标签: ruby json post curl params


【解决方案1】:

我明白了……没必要用参数胡闹。我可以通过执行以下操作将 JSON 有效负载作为哈希...

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

【讨论】:

  • Rack contrib 模块 Rack::PostBodyContentTypeParser 也会为您执行此操作。当 Content-Type 为 application/json 时,通过反序列化请求正文中提供的 JSON 数据来填充 Rack 参数哈希。见github.com/rack/rack-contrib
猜你喜欢
  • 2018-04-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-03
  • 1970-01-01
  • 2011-10-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多