curl命令在Git Bash可用但在CMD、PowerShell报错问题排查
问题原因与解决方案
这个问题的核心是不同终端对引号和转义字符的解析规则差异——Git Bash基于MinGW,和Linux终端的引号处理逻辑一致,能正确识别你的命令;但CMD和PowerShell有自己的一套解析规则,直接复用Git Bash的命令就会出问题。
具体错误的根源:
curl: (6) Could not resolve host错误:
在CMD和PowerShell中,你用的"(HTML转义的双引号)不会被识别为引号,反而被当成普通字符串。再加上CMD不把单引号'当作字符串边界,导致终端把Content-Type: application/json拆成了application作为单独的主机名,后面的Val 1,b等也被错误解析成了要访问的主机,自然就出现无法解析主机的错误。curl: (3) [globbing] unmatched close brace/bracket错误:
PowerShell默认会解析大括号{},把它当作通配符或者脚本块的标记,而不是curl请求体的一部分,所以会报括号不匹配的错误。
针对不同终端的修正命令:
适用于CMD的命令
curl -X POST http://localhost:5678/api/findgen -H "Content-Type: application/json" -d "{\"a\": \"Val 1\",\"b\": \"Val 2\",\"c\": \"Val 3\",\"d\": \"Val 4\"}" -o "file.json"
CMD里要用双引号包裹参数,内部的双引号需要用反斜杠\转义,同时要去掉原来的HTML转义"。
适用于PowerShell的命令
有两种靠谱的写法:
- 用单引号包裹请求体(PowerShell中单引号内部的内容会原样传递,不会被解析):
curl -X POST http://localhost:5678/api/findgen -H "Content-Type: application/json" -d '{"a": "Val 1","b": "Val 2","c": "Val 3","d": "Val 4"}' -o "file.json"
- 用PowerShell的专用转义符反引号`(注意是键盘左上角的反引号,不是单引号)转义内部双引号:
curl -X POST http://localhost:5678/api/findgen -H "Content-Type: application/json" -d "{`"a`": `"Val 1`",`"b`": `"Val 2`",`"c`": `"Val 3`",`"d`": `"Val 4`"}" -o "file.json"
内容的提问来源于stack exchange,提问作者raghavginfocus
相关产品推荐
相关产品推荐

