我正在尝试通过向服务器发送 JSON 数据并读取响应来测试服务器。
我需要POST
类似的数据{"item":"value with spaces"}
,但是当我使用时curl
,我发现它发送反斜杠和双引号:
curl -d "{\"item\":\"value with spaces\"}" http://myserver.com/somerubyapp?get=stuff
服务器实际上接收到的"{\"item\":\"value with spaces\"}"
包括字符串末尾的双引号、反斜杠以及所有内容。
是我使用curl
不当,还是我的 shell、bash 有问题?
答案1
这是一种死后发布,但我最近遇到了同样的问题(使用不同的后端),发现原因是错误的内容类型。默认情况下它是“text/plain”或“text/html”,在我的例子中curl -H "Content-Type: application/json" -d ...
解决了这个问题。
答案2
你用什么服务器端打印参数?它很可能是该方法的产物。
两种引用方法,.ie"{\"...
和'{"...
都可以。
编辑:我会给你一个我暗示的效果的例子:
% irb -r json
>> h = {"item" => "value with spaces"} # (1)
=> {"item"=>"value with spaces"} # (2)
>> h.to_json
=> "{\"item\":\"value with spaces\"}" # (3)
>> puts(h.to_json)
{"item":"value with spaces"} # (4)
=> nil
(1) 定义一个由单个键和关联值组成的哈希表。 irb 向您显示 (2) 中的结果,这又是哈希表。现在,当我查看 的 JSON 表示形式时h
,IRB转义 (3) 中的内部引号,而 (4) 表明反斜杠并不“真正”存在。
所以取决于如何您在服务器上打印参数,最终可能会得到您向我们展示的表示形式。