【发布时间】:2021-08-17 22:09:19
【问题描述】:
我正在尝试通过 curl 在this site 使用某个 API。 我正在尝试命令提示符页面中编写的示例 sn-p,但 cmd 返回以下错误:
curl -H 'Authentication: Token myToken' \
curl: (6) Could not resolve host: Token
curl: (6) Could not resolve host: myToken'
curl: (6) Could not resolve host: \
-d 'html=<h1>HTML PDF API is cool!</h1>' \
The system cannot find the file specified.
'https://htmlpdfapi.com/api/v1/pdf' > result.pdf
''https:' is not recognized as an internal or external command,
operable program or batch file.
我搜索了 curl 的用法和这个 API 的文档,但我无法解决。 作为 API、curl 和 HTTP 的新手,我什至不知道如何划分我的问题以及如何搜索解决方案。
任何信息将不胜感激。
进展
我发现了
- Windows 版本的 curl 与 Unix 版本的 curl 略有不同,后者在 API 站点的示例中显示。
- 我在 WSL Ubuntu 上尝试了相同的命令,它成功了。
我认为 Windows 有点不舒服,并且在做工程方面需要努力,因为那里的许多工程工具应该在 Mac 的 Linux 中使用。
【问题讨论】:
-
我猜你错误地使用
\作为命令行分隔符。它是 Windowscmd.exeCLI 上的^用于此目的。此外,您不应添加作为问题一部分的答案... -
还要检查 these question 关于 curl 语法。
-
问题不是
curl.exe。与 Linux shell 解释器相比,问题在于 Windows 命令处理器的语法不同。 Linux shell 解释器支持参数字符串的多种引用变体,根据使用的引号具有不同的解释。 Windows 命令处理器仅支持"引用包含空格或这些字符之一的参数字符串&()[]{}^=;!'+,`~以将双引号参数字符串中的所有内容解释为文字字符,%和!除外目前已启用延迟扩展。 -
\在行尾被 Linux shell 解释器解释为行尾的转义。这意味着下一行的字符串被附加到 shell 解释器当前解析的命令行中。这在 Windows 上也是可能的,但转义字符是^,它必须位于行尾才能将下一行的字符串解释为当前命令行的一部分。我建议让它变得简单,只写一个命令行:curl.exe -H "Authentication: Token myToken" -d "html=<h1>HTML PDF API is cool!</h1>" "https://htmlpdfapi.com/api/v1/pdf" > result.pdf -
在我看来 Effectiva studio d.o.o. 应该扩展网页 HTML PDF API Usage 并发布每个 Linux/Mac 使用示例以及 Windows 使用示例。对于此页面上的示例来说,这将非常容易,因为所有
'都需要替换为"和所有\替换为^以使所有示例都具有适用于 Windows 命令处理器的有效语法。