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)
看起来您正在使用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-WebRequest
cmdlet的 Powershell 别名,它可以执行 cURL 程序可以执行的大部分操作,但具有非常不同的参数语法。
此外,虽然您可以从cmd
using调用 Powershell powershell -c <command>
,但这在这里并没有真正的帮助,因为cmd
无论如何您都必须使用's 愚蠢的语法来转义字符串。
另一种选择是使用适用于 Linux 的 Windows 子系统 (WSL),它允许您直接在 Windows 上运行 Linux 程序(包括默认的 Ubuntu 版本bash
和curl
),无需虚拟机或重新启动。关于此的完整详细信息可以在https://msdn.microsoft.com/en-us/commandline/wsl/about找到,但简短版本是尝试从任何命令提示符或 Powershell 窗口运行bash
(或bash.exe
),它会安装Linux 子系统或至少告诉你如何。
问题是你的 -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 来清楚起见。
归档时间: |
|
查看次数: |
76697 次 |
最近记录: |