ZetCode

PowerShell Invoke-WebRequest

最后修改:2025 年 2 月 15 日

在本文中,我们将介绍 PowerShell 中的 Invoke-WebRequest cmdlet。此 cmdlet 向网页和 REST API 发送 HTTP/HTTPS 请求。它返回 Web 响应,包括状态码、标头和内容。

Web 请求基础知识

Invoke-WebRequest 是 PowerShell 用于 Web 交互的主要 cmdlet。它支持 GET、POST、PUT、DELETE 和其他 HTTP 方法。该 cmdlet 返回一个包含标头、状态码和内容的响应对象。它可以解析 HTML 并使用 DOM 方法提取元素。

基本 GET 请求

最简单的用法是向 URL 发起 GET 请求。这将检索网页内容。响应对象包含 StatusCode 和 Content 等属性。默认情况下,PowerShell 会自动跟进多达 5 次重定向。

webrequest1.ps1
$response = Invoke-WebRequest -Uri "https://example.com"
$response.Content

这会向 example.com 发起 GET 请求并存储响应。Content 属性包含原始 HTML。其他有用的属性包括 StatusCode 和 Headers。

从页面提取链接

Invoke-WebRequest 可以解析 HTML 并提取元素。Links 属性包含页面上的所有锚点标签。每个链接都有 href 和 innerText 属性。这对于 Web 抓取任务很有用。

webrequest2.ps1
$response = Invoke-WebRequest -Uri "https://example.com"
$response.Links | Select-Object href, innerText

这会检索 example.com 上的所有链接,并显示它们的 URL 和文本。Select-Object cmdlet 过滤输出,仅显示相关属性。

发送带数据的 POST 请求

要将数据发送到 Web API,请使用带有主体的 POST 方法。Body 参数接受哈希表或 JSON 字符串。可以使用 Headers 参数添加标头。这在 REST API 交互中很常见。

webrequest3.ps1
$body = @{
    username = "admin"
    password = "secret"
} | ConvertTo-Json

$response = Invoke-WebRequest -Uri "https://api.example.com/login" `
    -Method Post -Body $body -ContentType "application/json"
$response.StatusCode

这会将 JSON 有效负载发送到登录 API 端点。ConvertTo-Json cmdlet 将哈希表转换为 JSON 格式。响应的状态码指示成功或失败。

处理身份验证

Invoke-WebRequest 支持各种身份验证方法。对于基本身份验证,请使用 Credential 参数。对于 OAuth,请在标头中包含 bearer token。可以通过 -UseDefaultCredentials 使用 Windows 身份验证。

webrequest4.ps1
$cred = Get-Credential
$response = Invoke-WebRequest -Uri "https://api.example.com/data" `
    -Credential $cred
$response.Content

这会提示输入凭据并使用它们进行基本身份验证。Get-Credential cmdlet 安全地收集用户名和密码。凭据将发送在 Authorization 标头中。

将 Web 内容保存到文件

可以使用 OutFile 参数直接将 Web 内容保存到文件。这可以避免大文件下载时的内存问题。PassThru 参数在保存时返回响应对象。可以使用 Verbose 参数跟踪进度。

webrequest5.ps1
Invoke-WebRequest -Uri "https://example.com/largefile.zip" `
    -OutFile "C:\downloads\file.zip" -Verbose

这会将文件直接下载到磁盘,同时显示进度。Verbose 参数提供下载状态更新。对于大文件,此方法比存储在内存中更有效。

来源

PowerShell 文档

在本文中,我们介绍了 PowerShell 中的 Invoke-WebRequest cmdlet。

作者

我叫 Jan Bodnar,是一名充满激情的程序员,拥有丰富的编程经验。我从 2007 年开始撰写编程文章。迄今为止,我已撰写了 1,400 多篇文章和 8 本电子书。我在编程教学方面拥有十多年的经验。

列出 所有 PowerShell 教程