【问题标题】:How to use the curl command in PowerShell?如何在 PowerShell 中使用 curl 命令?
【发布时间】:2017-02-27 13:30:44
【问题描述】:

我在 PowerShell 中使用 curl 命令通过 Jenkins 作业在位桶拉取请求页面中发布评论。我使用下面的 PowerShell 命令来执行 curl 命令,但我得到了下面提到的错误。有人可以帮我解决这个问题吗?

$CurlArgument="-u xxx@gmail.com:yyyy -X POST https://xxx.bitbucket.org/1.0/repositories/abcd/efg/pull-requests/2229/comments --data content=success"
$CURLEXE='C:\Program Files\Git\mingw64\bin\curl.exe'
& $CURLEXE $CurlArgument

错误详情:

curl.exe : curl: 没有指定 URL!
在行:3 字符:1
+ & $CURLEXE $CurlArgument
+ ~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo : NotSpecified: (curl: 没有指定 URL!:String) [], RemoteException
    + FullyQualifiedErrorId : NativeCommandError

curl:尝试“curl --help”或“curl --manual”以获取更多信息

【问题讨论】:

  • 对不起,没有任何 curl 的经验,但是你为什么不使用内置的 PowerShell Invoke-WebRequest cdmlet?
  • @MartinBrandl,我不知道,我会检查一下并告诉你。

标签: powershell curl jenkins


【解决方案1】:

或者您可以使用splatting 调用 curl.exe,如下所示。

> curl.exe '-u', 'xxx@gmail.com:yyyy',
 '-X', 'POST',
 'https://xxx.bitbucket.org/1.0/repositories/abcd/efg/pull-requests/2229/comments',                
 '--data', 'content=success'

使用这个命令Get-Command curl.exe知道curl.exe在哪里

其他选项是使用 Invoke-WebRequest 删除别名 curl 命令

在 PowerShell 中查看和删除别名

>Get-Aliases
>Remove-Item alias:curl

然后只运行没有'.exe'的命令

> curl '-u', 'xxx@gmail.com:yyyy',
 '-X', 'POST',
 'https://xxx.bitbucket.org/1.0/repositories/abcd/efg/pull-requests/2229/comments',                
 '--data', 'content=success'

我希望这会有所帮助。

【讨论】:

    【解决方案2】:

    使用splatting

    $CurlArgument = '-u', 'xxx@gmail.com:yyyy',
                    '-X', 'POST',
                    'https://xxx.bitbucket.org/1.0/repositories/abcd/efg/pull-requests/2229/comments',
                    '--data', 'content=success'
    $CURLEXE = 'C:\Program Files\Git\mingw64\bin\curl.exe'
    & $CURLEXE @CurlArgument
    

    【讨论】:

    • 收到以下错误。 + CategoryInfo : NotSpecified: (% Total % ... Time Current:String) [], RemoteException + FullyQualifiedErrorId : NativeCommandError
    • 这是curl 状态输出。添加参数-s 来抑制它。
    • $CurlArgument = '-s', '-u', 'xxx@gmail.com:yyyy', '-X', 'POST', 'xxx.bitbucket.org/1.0/repositories/abcd/efg/pull-requests/2229/…', '--data ', '内容=成功'
    • 在使用 content-type: multipart/form-data 时,比尝试在 PowerShell 中使用 Invoke-RestMethod 容易得多 :) 谢谢
    【解决方案3】:

    在 Powershell 3.0 及更高版本中同时存在 Invoke-WebRequest 和 Invoke-RestMethod。 Curl 实际上是 PoSH 中 Invoke-WebRequest 的别名。我认为使用原生 Powershell 会比 curl 更合适,但这取决于你:)。

    Invoke-WebRequest MSDN 文档在这里: https://technet.microsoft.com/en-us/library/hh849901.aspx?f=255&MSPPError=-2147217396

    Invoke-RestMethod MSDN 文档在这里: https://technet.microsoft.com/en-us/library/hh849971.aspx?f=255&MSPPError=-2147217396

    【讨论】:

    • 不幸的是,Invoke_WebRequest 在您可以使用 curl 执行的操作列表中甚至没有接近 curl。简单的--verbose 标志无法查看有关 TLS 连接、RAW http 请求和响应的详细信息。我错过了什么吗?
    • 很有用,谢谢!有时我们习惯于以特定的方式做事而忘记寻找替代方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-06
    • 1970-01-01
    相关资源
    最近更新 更多