【问题标题】:How does JSON data get sent in an http request?JSON 数据如何在 http 请求中发送?
【发布时间】:2024-01-01 22:14:01
【问题描述】:

假设我正在发出下面的 http 请求,以更新 mongoDB 数据库中的一些记录:

PUT
http://dev.mycompany.co/ping
{"id":4432, "name":"Jane Doe", "products":[ {"id":287}, {"id":434} ] }

请注意,上面 JSON 的“products”属性中有一个由两个对象组成的数组。我有通过 Fiddler 和我编写的 ruby​​ 脚本以这种通用格式发送的数据。

当通过 Fiddler 发送时,我在 JSON 中的数据被正确解析并更新到我的数据库中。当通过我的 ruby​​ 脚本发送时,JSON 中的数据没有被正确解析。我一直在试图弄清楚为什么会这样。现在,我想知道当 JSON 与 http 请求一起发送时,数据实际上是如何发送的。有人能指出我正确的方向吗?

【问题讨论】:

  • 一个猜测:您的 Ruby 脚本可能正在发送一组不同的标头(可能是身份验证、授权或 Content-Type
  • 它在 http 请求的正文中作为 json 文本发送。你遇到了什么错误?将 Fiddler 放在您的 ruby​​ 脚本和服务器之间,以便您可以拦截 ruby​​ 脚本正在执行的请求。
  • @AaronBrager 有没有办法找出我的 Ruby 脚本发送的标头?
  • @NazaretK。我正在从终端启动 ruby​​ 脚本。 Fiddler 仅捕获通过浏览器发送或发送到浏览器的流量
  • 好的,我已经有一段时间没有使用 Fiddler,所以我不记得了。试试这个:ws.apache.org/tcpmon/tcpmontutorial.html 这可能是有史以来最简单的 tcp 监控工具 :)

标签: json http httprequest


【解决方案1】:

在询问了一些关于 SO 的其他问题并进行了更多研究后,我得出了以下结论。

问:如何在 http 请求中发送 JSON 数据?

答:这取决于您在请求中如何发送 JSON 数据(content-type 是什么)

我遇到过两种发送 JSON 数据的方式。

  1. 使用内容类型发送 application/json

    使用这种内容类型,JSON 数据按原样发送。文字 JSON 数据存储为字符串并随请求一起发送。如果您的 JSON 很复杂,包含嵌套对象和数组等,那么这可能就是您想要的。有关使用 Ruby 的 Net/HTTP 发送嵌套 JSON 的工作示例,请参阅this SO question I asked 上的答案。

  2. 使用内容类型发送 x-www-form-urlencoded

    这就是 Ruby 的 Net/HTTP 请求通常发送出去的方式。这些请求的形式类似于:id=343?entity=Microsoft?foo=bar。在您拥有复杂的 JSON 之前,这种内容类型很好。

【讨论】: