如何在 Windows 中进行 Curl POST 调用?

Dim*_*ims 9 windows curl windows-10

我正在尝试在 Windows 10 下发出以下命令:

D:\>curl -i -X POST -H "Content-Type:application/json" -d '{  "firstName" : "Frodo",  "lastName" : "Baggins" }' http://localhost:8080/people
Run Code Online (Sandbox Code Playgroud)

不幸的是,它会产生许多错误:

curl: (6) Could not resolve host: firstName
curl: (7) Failed to connect to  port 80: Connection refused
curl: (6) Could not resolve host: Frodo,
curl: (6) Could not resolve host: lastName
curl: (7) Failed to connect to  port 80: Connection refused
curl: (6) Could not resolve host: Baggins
curl: (3) [globbing] unmatched close brace/bracket in column 1
Run Code Online (Sandbox Code Playgroud)

显然,它不理解语法。

这是为什么,如何解决?

D:\>curl --version
curl 7.46.0 (x86_64-pc-win32) libcurl/7.46.0 OpenSSL/1.0.2e zlib/1.2.8 WinIDN libssh2/1.6.0
Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtsp scp sftp smtp smtps telnet tftp
Features: AsynchDNS IDN IPv6 Largefile SSPI Kerberos SPNEGO NTLM SSL libz
Run Code Online (Sandbox Code Playgroud)

小智 17

另一种选择是用反斜杠屏蔽双引号,如下所示:

curl -i -X POST -H "Content-Type:application/json" -d "{\"firstName\": \"Frodo\",  \"lastName\" : \"Baggins\" }" http://localhost:8080/people
Run Code Online (Sandbox Code Playgroud)


CBH*_*ing 6

看起来您正在使用cmd.exe. 命令提示符的字符转义规则既陈旧又糟糕。我建议改用 Powershell;它使用的规则与bash其他 *nix shell 的规则更相似(虽然不完全相同,特别是因为它使用 `(反引号)作为转义字符而不是反斜杠)。

这是我系统上 Powershell 中的命令:

& 'C:\Program Files\Git\mingw64\bin\curl' -i -X POST -H "Content-Type:application/json" -d '{  "firstName" : "Frodo",  "lastName" : "Baggins" }' http://localhost:8080/people
Run Code Online (Sandbox Code Playgroud)

前导&是必需的,因为程序的路径是一个带引号的字符串。我必须指定路径,因为curl.exe我的 Windows 中没有PATH。但是,我可以转义“程序文件”中的空间:

C:\Program` Files\Git\mingw64\bin\curl -i -X POST -H "Content-Type:application/json" -d '{  "firstName" : "Frodo",  "lastName" : "Baggins" }' http://localhost:8080/people
Run Code Online (Sandbox Code Playgroud)

单引号和双引号在您使用它们时起作用,'分隔字符串的开头并在其中"显示为文字字符。

请注意,你必须提供一个路径curl可执行文件,或者至少说明curl.exe; curl本身是Invoke-WebRequestcmdlet的 Powershell 别名,它可以执行 cURL 程序可以执行的大部分操作,但具有非常不同的参数语法。

此外,虽然您可以cmdusing调用 Powershell powershell -c <command>,但这在这里并没有真正的帮助,因为cmd无论如何您都必须使用's 愚蠢的语法来转义字符串。


另一种选择是使用适用于 Linux 的 Windows 子系统 (WSL),它允许您直接在 Windows 上运行 Linux 程序(包括默认的 Ubuntu 版本bashcurl),无需虚拟机或重新启动。关于此的完整详细信息可以在https://msdn.microsoft.com/en-us/commandline/wsl/about找到,但简短版本是尝试从任何命令提示符或 Powershell 窗口运行bash(或bash.exe),它会安装Linux 子系统或至少告诉你如何。

  • 对于该线程的新手,Curl 已经包含在 Windows 10 中一段时间​​了。来源:https://techcommunity.microsoft.com/t5/Containers/Tar-and-Curl-Come-to-Windows/ba-p/382409 要检查您的 Windows 10 是否有它,请从 PowerShell 或 CMD 运行以下命令: `C:\Windows\System32\curl.exe --help` (2认同)

Jon*_*nno 1

问题是你的 -d 参数以双引号作为参数。您需要将其用引号引起来,并转义其中的双引号。

您应该能够执行以下操作:

curl -i -X POST -H "Content-Type:application/json" -d "{  ^"firstName^" : ^"Frodo^",  ^"lastName^" : ^"Baggins^" }" http://localhost:8080/people
Run Code Online (Sandbox Code Playgroud)

就我个人而言,我会将它们放在一个文件中,然后使用 -d @filename 来清楚起见。