如何在http请求中发送JSON数据?
比方说,我正在做下面的HTTP请求,以更新的MongoDB数据库中的一些记录:如何在http请求中发送JSON数据?
PUT
http://dev.mycompany.co/ping
{ “ID”:4432, “名”: “李四”,“产品“:[{”id“:287},{”id“:434}]}
请注意,上面的JSON的”products“属性中有两个对象的数组。我有通过这种通用格式发送的数据,无论是通过Fiddler还是通过我写的一个ruby脚本。
当通过Fiddler发送时,JSON中的数据被正确解析并更新到我的数据库中。当通过我的ruby脚本发送时,JSON中的数据是而不是正确解析。我一直在试图弄清楚为什么会这样。现在,我想知道当一个JSON与一个http请求一起发送时,实际上如何发送数据。有人能指引我朝着正确的方向吗?
在问了关于SO的其他一些问题并做了更多的研究之后,我得出了以下结论。
问:如何在http请求中发送JSON数据?
答:这取决于你如何在请求发送JSON数据(什么是内容类型)
我遇到了JSON数据传送两种方式。
-
内容使用类型应用/ JSON
利用这种内容类型发送,JSON数据被发送字面上原样。文字JSON数据作为字符串存储并与请求一起发送。如果你的JSON是复杂的,嵌套的对象和数组等,这可能是你想要的。有关使用Ruby的Net/HTTP发送嵌套JSON的工作示例,请参阅this SO question I asked上的答案。
-
使用内容类型发送X WWW的形式,进行了urlencoded
这是怎么了红宝石的净/ HTTP请求通常被发送出去。这些请求的形式类似于:id = 343?entity = Microsoft?foo = bar。这种内容类型很好,直到你有一个复杂的JSON。
一个猜测:你的Ruby脚本可以发送不同的套头(也许认证,授权,或'内容Type') –
它被作为在HTTP请求的身体JSON文本。你遇到了什么错误?把Fiddler放在你的ruby脚本和服务器之间,这样你就可以拦截ruby脚本正在做的请求。 –
@AaronBrager有没有办法找出我的Ruby脚本正在发送什么标题? – Max