如何用PowerShell发起一个Http请求

PowerShell 是一种跨平台的任务自动化解决方案,包括命令行 shell、脚本语言和配置管理框架。PowerShell 提供了多种执行网络请求的方法,使得自动化网络任务变得更加简单。本文将介绍几种在 PowerShell 中发起网络请求的命令,并重点探讨 Invoke-WebRequest 命令的使用,最后通过具体的代码示例来展示它们的用法。

PowerShell 网络请求命令概览

在 PowerShell 中,最直接用于网络请求的命令是 Invoke-WebRequest Invoke-RestMethod 。此外,.NET Framework 的 System.Net.WebClient System.Net.Http.HttpClient 类也提供了在 PowerShell 脚本中执行网络请求的能力。下面是对这些命令和类的简要介绍:

Invoke-WebRequest

Invoke-WebRequest 是一个功能强大的 PowerShell cmdlet,它可以发送 HTTP、HTTPS 请求到 Web 服务,并接收响应。它提供了对响应内容的详细访问,包括 HTTP 状态码、响应头、原始内容等。

Invoke-RestMethod

Invoke-RestMethod cmdlet 类似于 Invoke-WebRequest ,但它更专注于与 RESTful Web 服务交互。它自动处理 JSON 和 XML 响应内容的解析,直接返回 PowerShell 对象,使得处理响应数据更加方便。

System.Net.WebClient

System.Net.WebClient 类提供了一种简单的方法来执行网络请求。它是 .NET Framework 的一部分,可以通过 PowerShell 脚本使用。

System.Net.Http.HttpClient

System.Net.Http.HttpClient 是一个现代的 HTTP 客户端,支持异步操作。它是 .NET Framework 和 .NET Core 的一部分,为复杂的网络请求和应用程序提供了强大的功能。

Invoke-WebRequest 详解

Invoke-WebRequest 是处理网络请求的首选 PowerShell cmdlet。它不仅允许你发送 GET、POST、PUT、DELETE 等 HTTP 请求,还可以处理响应,如提取内容、查看响应头等。

发送 GET 请求

发送一个 GET 请求并获取网页内容:

$response = Invoke-WebRequest -Uri "http://example.com"
Write-Output $response.Content

发送 POST 请求

使用 Invoke-WebRequest 发送一个 POST 请求:

$body = @{username='user'; password='pass'} | ConvertTo-Json
$response = Invoke-WebRequest -Uri "http://example.com/api/login" -Method POST -Body $body -ContentType "application/json"
Write-Output $response.Content

配置 Invoke-WebRequest 通过代理服务器发送请求:

$proxyUri = "http://proxyserver:port"
$response = Invoke-WebRequest -Uri "http://example.com" -Proxy $proxyUri
Write-Output $response.StatusCode

Invoke-WebRequest 官网说明文档

https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/invoke-webrequest?view=powershell-7.4

很明显这是一个 JSON 对象,其中的“msg”就是我们需要了解的登录结果文本,由于文本被编码成Unicode,要转换为人能看懂的文字,就需要使用 ConvertFrom-Json cmdlet 解析该对象再来输出正确的文本消息。把以上的代码组织起来,保存成 Powershell 的脚本格式,扩展名是 .ps1,文件名任意,比如:my_login.ps1,保存在 D:\Documents。$Matches 变量是一个特殊的 PowerShell 变量,它保存正则表达式抓取的结果。 curl 是利用URL语法在命令行下工作的文件传输工具,1997年首次发行,支持文件上传和下载,结合shell脚本体验更棒。但按照传统习惯称 curl 为下载工具。 curl 支持的通信协议有 有FTP、FTPS、HTTPHTTPS、TFTP、SFTP 等等,支持的平台有 Linux、MacOSX、Darwin、Windows、DOS、FreeBSD等等。 一、curl的作用:1、查看 Invoke-WebRequest http://localhost:8088/login -Method POST -ContentType "application/json" -Body '{"account":"ElasticSearch","password":"123456"}' 详细手... curl -h @{"Content-Type"="application/json"} -Uri "http://localhost:9292/api/down/makeUpDown" -body '{"taskid": 123}' -Method 'POST' ping 127.0.0.1 -n 1 PowerShell curl -uri 'http://localhost:8887/job/test' -body 'p1=111&p2=222&p3=333' -method 'POST' Xshell curl -X POST http://localhost:8887/job/test -d 'p1=111&p2=222&p3=333' 1、 HttpClientModule导入 app.module.ts import { HttpClientModule } from '@angular/common/http'; @NgModule({ imports: [ BrowserModule, HttpClientModule, declarations: [ ], bootstrap: ...