当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] 如何在 PowerShell 中使用 cURL

作者:精品下载站 日期:2024-12-14 01:58:26 浏览:18 分类:玩电脑

如何在 PowerShell 中使用 cURL


命令行工具 cURL(客户端 URL)通常用于向服务器发送或接收数据。该工具的优点是支持多种协议,并提供身份验证、代理、传输恢复等功能。

我们还可以在 PowerShell 中使用 cURL,但是您需要了解一些重要的事情。 PowerShell 也有自己的方法来与服务器传输数据。

在本文中,我将解释如何在 PowerShell 中使用 cURL,并提供一些示例。

PowerShell 卷曲

cURL 自 1997 年以来一直存在,用于与 Web 服务交互、发送或检索数据。该工具通常用于编写脚本或自动执行任务。当然,您可能也想在 PowerShell 脚本中使用 cURL。

现在,在我们可以在 PowerShell 中使用 cURL 之前,您需要了解一件重要的事情。在 PowerShell 6 之前,命令 cURL 一直是 PowerShell 中 cmdlet Invoke-WebRequest 的别名。这导致了许多问题/混乱,因此从 PowerShell 6 开始,命令 cURL 现在实际上调用了 curl.exe 实用程序。

我们可以通过在 PowerShell 5 和 PowerShell 7 中使用 Get-Command cmdlet 查找命令来查看这一点:

[玩转系统] 如何在 PowerShell 中使用 cURL

[玩转系统] 如何在 PowerShell 中使用 cURL

正如您所看到的,命令curl调用了PowerShell 7中的curl.exe,就像我们期望的那样。但在 PowerShell 5.1 中,该命令实际上是一个别名。

问题在于 Invoke-WebRequest cmdlet 的整个语法与 cURL 不同,因此您的命令将无法按您的预期运行。

Windows 10/11 上默认安装了 cURL,但如果您没有安装 cURL,可以在此处下载。

删除别名 cURL

如果您想在 PowerShell 5.1 中使用真正的 cURL 命令行实用程序,那么您有两个选择。您可以使用curl.exe作为命令,或删除别名。我更喜欢后者,因为这将确保您的脚本也可以在 PowerShell 7 上运行。要删除别名,您可以使用以下命令:

Remove-Item alias:curl

在 PowerShell 中使用 cURL

那么让我们看一下如何在 PowerShell 中使用 cURL 的一些示例。在下面的示例中,我将展示真正的 cURL 方法和 PowerShell 版本 Invoke-WebRequest,以便您更好地理解其中的差异。

基本 GET 请求

要简单地获取特定 URL 的内容,我们可以使用以下命令。

curl https://httpbin.org/ip
Invoke-WebRequest -Uri "https://httpbin.org/ip"

# In this case it's better to use, because the output is in JSON
Invoke-RestMethod https://httpbin.org/ip

发送数据

我在下面的示例中使用的 httpbin 端点将仅返回我们发送给它的数据,但这在本例中是完美的。要使用 cURL 发送数据,我们需要将 HTTP 方法设置为 POST。

curl -X POST https://httpbin.org/anything -d "test=data"

Invoke-WebRequest 方法使用相同的原理,只是语法不同:

$body = "test=data"
Invoke-WebRequest -Uri "https://httpbin.org/anything" -Method POST -Body "test=data"

在上面的示例中,我们仅向端点发送单个值,但更常见的是向端点提交表单或发送多个字段。在 cURL 中,我们可以通过使用 -F 参数指定字段来做到这一点。

# POST form data with multiple fields
curl -X POST https://httpbin.org/post `
  -F "name=John Doe" `
  -F "[email protected]" `
  -F "message=Hello World"

# Or for a JSON payload
curl -X POST https://httpbin.org/post -H "Content-Type: application/json" `
  -d '{"field1":"value1","field2":"value2","field3":"value3"}'

[玩转系统] 如何在 PowerShell 中使用 cURL

使用 Invoke-WebRequest 方法时,我们可以首先使用要发布的表单数据创建一个哈希表。为了保持代码的可读性,我们还可以使用哈希表和splatting来存储所有参数

$formData = @{
    name = "John Doe"
    email = "[email protected]"
    message = "Hello World"
}

$post = @{
    Uri = "https://httpbin.org/post"
    Method = 'Post'
    Body = $formData
}

Invoke-WebRequest @post

使用身份验证

大多数 API 都需要某种形式的身份验证才能使用它传输数据。身份验证有不同的方法,但基本身份验证(用户名和密码)或不记名令牌身份验证是最常用的选项。

要通过 cURL 使用基本身份验证,您需要以 username:password 格式传递用户名和密码。在下面的示例中,我们还将在 URL 中添加用户名和密码,但这仅用于测试目的:

curl -u "username:password" https://httpbin.org/basic-auth/username/password

# returns on succesfull authentication
{
  "authenticated": true,
  "user": "username"
}

使用 PowerShell 方法 Invoke-WebRequest 时,我们首先需要创建一个凭证对象。您可以使用 Get-Credential cmdlet 要求用户输入凭据,但是当您想要将凭据存储在脚本中时,您需要首先将它们转换为安全字符串:

# Get the credentials from the user
$Credentials = Get-Credential -UserName "username" -Message "Enter your password"

# Or store the credentials in the script
$Password = ConvertTo-SecureString "password" -AsPlainText -Force
$Credentials = New-Object System.Management.Automation.PSCredential ("username", $Password)

Invoke-WebRequest -Uri "https://httpbin.org/basic-auth/username/password" -Credential $Credentials

总结

微软在 PowerShell 7 中删除了 cURL 别名是一件好事,因为尽管 cURL 和 Invoke-WebRequest 可能看起来很相似,但 cURL 具有更多的功能。如果您要创建要在其他计算机上运行的脚本,则可以使用命令 curl.exe 来确保使用 cURL 而不是 Invoke-WebRequest。

希望您喜欢这篇文章,如果您有任何疑问,请在下面发表评论。

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯