如何在curl.exe的-d参数中发送双引号?

问题描述 投票:0回答:7

如何在

-d
参数中使用curl.exe 发送双引号字符。 我不想对双引号进行 URL 编码。 由于
-d
数据需要用双引号引起来,我似乎无法让它工作。

或者curl.exe 是否有另一个标志告诉它使用文件内容作为整个表单发布数据?

windows curl
7个回答
63
投票

我的

curl.exe
适用于这种形式:

-d "{\"param\":\"value\"}"

即数据周围的双引号,以及内部用反斜杠屏蔽的双引号


24
投票

你肯定可以避开双引号。如何执行此操作取决于您未指定的操作系统和 shell。在 Windows 上,您可以使用 ^ 作为转义字符。

你也可以这样做:

curl [...] -d @filename 

...从名为 filename 的文件中读取发布数据。

Google 和/或人类是你的朋友。

http://curl.haxx.se/docs/manpage.html


9
投票

对于双引号问题的转义,我发现从 shell 中可以将双引号增加三倍:

curl -d {"""foo""":"""bar"""}

在批处理文件中使用双引号时:

curl -d {""foo"":""bar""}

首先在 shell 中进行测试是非常烦人的。


9
投票

您可以用单引号将数据括起来,并在内部使用双引号。

PowerShell 中的示例

curl.exe https://httpbin.org/anything `
    -H 'Content-Type: application/json' `
    -d '{ "this": "is proper json" }'.Replace('"', '""')

请注意,cURL 内置于 Windows 10 中,但 PowerShell 使用别名来隐藏它,因此您必须使用

curl.exe


2
投票

如果您在 Powershell 中执行此操作,则需要用单引号引用整个文本块,并且仍然对引号进行转义。 即 -d '{\"param\":\"value\"}'

在 Win11 VSCode Powershell 7 终端上测试


0
投票

老问题,但我不喜欢任何解决方案(实际上

-d @filename
本来就可以,但它对我不起作用)。因此,在阅读文档(https://curl.se/docs/manpage.html)后,我最终使用的是:

echo '{ "a": 1, "b": 2 }' | curl -H "Content-Type: application/json" -d "@-" http://localhost:8080

-2
投票

有一种东西叫美元斜线

def cmd = $/ curl -d '{"param":"value"}' -X POST https://example.com/service /$
sh cmd
© www.soinside.com 2019 - 2024. All rights reserved.