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 次重定向。
$response = Invoke-WebRequest -Uri "https://example.com" $response.Content
这会向 example.com 发起 GET 请求并存储响应。Content 属性包含原始 HTML。其他有用的属性包括 StatusCode 和 Headers。
从页面提取链接
Invoke-WebRequest 可以解析 HTML 并提取元素。Links 属性包含页面上的所有锚点标签。每个链接都有 href 和 innerText 属性。这对于 Web 抓取任务很有用。
$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 交互中很常见。
$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 身份验证。
$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 参数跟踪进度。
Invoke-WebRequest -Uri "https://example.com/largefile.zip" `
-OutFile "C:\downloads\file.zip" -Verbose
这会将文件直接下载到磁盘,同时显示进度。Verbose 参数提供下载状态更新。对于大文件,此方法比存储在内存中更有效。
来源
在本文中,我们介绍了 PowerShell 中的 Invoke-WebRequest cmdlet。
作者
列出 所有 PowerShell 教程。