正确转义curl post数据的双引号?

正确转义curl post数据的双引号?

我正在尝试通过向服务器发送 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 表示形式时hIRB转义 (3) 中的内部引号,而 (4) 表明反斜杠并不“真正”存在。

所以取决于如何您在服务器上打印参数,最终可能会得到您向我们展示的表示形式。

相关内容