curl: (3) 以 ' ' 结尾的端口号 [Powershell]

curl: (3) Port number ended with ' ' [Powershell]

我正在尝试使用 curl 在 powershell 中发出 post 请求。但我似乎不幸收到了这个错误。

我试过删除各处的空格,并用谷歌搜索问题,但没有找到解决方案。

curl.exe -X 'POST' -H @{'Content-Type'='application/json'; 'accept'='application/json'}  -d \"{\"name\":\"test3\", \"auto_init\":true, \"default_branch\": \"master\", \"description\": \"My Test\", \"gitignores\": \"Vim\", \"issue_labels\":\"Default\", \"license\": \"DOC\", \"name\":\"test2\", \"private\":false, \"readme\":\"Default\",\"template\":false,\"trust_model\":\"default\"}\" http://localhost:3000/api/v1/user/repos?access_token=c11ceb97fa594a7e6c4b5519e4327908be3274b9
  • 回复 -H:

    • curl.exe 是一个 外部程序 ,这意味着您无法有意义地传递 PowerShell hashtable (@{ ... } ) 作为参数,因为它将(无用地)作为文字字符串 System.Collections.Hashtable.

      传递
    • 相反,将 strings 作为 multiple -H 选项传递,每个选项的形式为 '<name>: <value>'

  • 回复 -d:

    • PowerShell的escape character`(所谓的反引号),不是\.

    • 由于您的论点将被逐字传递 (不包含要插入的变量引用),请使用 verbatim (single-quoted) string ('...').

    • 然而:PowerShell 7.2 的悲惨现实是 额外的手动\-转义嵌入式 " 字符在传递给外部程序 的参数中是必需的。此 可能 在未来的版本中得到修复, 可能 需要选择加入。有关详细信息,请参阅链接副本的

总而言之:

curl.exe -H 'Content-Type: application/json' -H 'accept: application/json' -d '{\"name\":\"test3\", \"auto_init\":true, \"default_branch\": \"master\", \"description\": \"My Test\", \"gitignores\": \"Vim\", \"issue_labels\":\"Default\", \"license\": \"DOC\", \"name\":\"test2\", \"private\":false, \"readme\":\"Default\",\"template\":false,\"trust_model\":\"default\"}' 'http://localhost:3000/api/v1/user/repos?access_token=c11ceb97fa594a7e6c4b5519e4327908be3274b9'

注意:我省略了 -X 'POST',因为,正如 Daniel Stenberg 所指出的,当您使用-d 选项。