PowerShell内置命令可直接发起HTTP请求:GET用Invoke-WebRequest,POST需ConvertTo-Json序列化并设ContentType;HTTPS证书错误时临时跳过验证仅限测试;下载文件用-PassThru配合Write-Progress显示进度。

在Windows系统中快速调用API、测试后端接口或自动化获取网页数据时,必须绕过浏览器直接发起HTTP请求。PowerShell无需额外安装,开箱即用,但命令选错或参数遗漏会导致401认证失败、JSON解析乱码、SSL握手终止等典型问题。
发送最简GET请求
这一步操作起来很简单,直接把命令敲进去就能看到响应。
以管理员身份打开PowerShell窗口→输入:Invoke-WebRequest -Uri "https://httpbin.org/get"→按回车执行。
返回结果是完整对象,包含StatusCode、Headers、Content等属性。若只想看原始HTML或JSON文本,加.Content后缀即可,例如:(Invoke-WebRequest -Uri "https://httpbin.org/get").Content。
POST提交JSON数据
当API文档明确要求Content-Type: application/json且请求体为JSON格式时,必须手动序列化并指定类型,否则服务端会拒收。
方法一:单行命令(适合简单结构)
执行:Invoke-RestMethod -Uri "https://httpbin.org/post" -Method POST -Body (@{name="Alice";score=95} | ConvertTo-Json) -ContentType "application/json"
让 Windows 桌面程序在开机时静默自启并隐藏到系统托盘。特别适用于 Flutter、Electron 等无视 VBS/ProcessStartInfo 窗口样式、难以隐藏的顽固应用。提供「VBS 启动器 + Python ctypes/Win32 API」的隐藏窗口方案,可稳定把窗口收进托盘且不闪控制台。
方法二:分步构造(便于调试和复用)
第一步:定义哈希表并转为JSON字符串$body = @{user_id=1001; action="login"; timestamp=(Get-Date -UFormat "%Y-%m-%d %H:%M:%S")} | ConvertTo-Json
第二步:发起带认证头的POST请求Invoke-RestMethod -Uri "https://api.example.com/v1/event" -Method POST -Body $body -ContentType "application/json" -Headers @{"Authorization"="Bearer abc123"}
⚠️注意:ConvertTo-Json默认只展开一层嵌套,含深层数组或空值时需加-Depth 10参数,否则部分字段会丢失。
处理HTTPS证书错误
内网测试环境或自签名证书服务器常触发“无法建立信任关系”错误,导致请求直接中断。
第一步:临时跳过SSL验证(仅限开发/测试机)[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
第二步:在Invoke-WebRequest或Invoke-RestMethod中添加-SkipCertificateCheck参数
例如:Invoke-RestMethod -Uri "https://192.168.1.100/api/status" -SkipCertificateCheck
【跳过证书检查不可用于生产环境】,它会削弱传输层安全性,暴露凭据与敏感数据。
下载文件并显示进度
下载大文件时默认无提示,容易误判为卡死。用Write-Progress可实时反馈进度条。
① 执行:$url = "https://github.com/PowerShell/PowerShell/releases/download/v7.4.0/PowerShell-7.4.0-win-x64.msi"
② 执行:$output = "$env:USERPROFILE\Downloads\pwsh.msi"
③ 执行:$response = Invoke-WebRequest -Uri $url -OutFile $output -PassThru
④ 查看下载状态:Write-Progress -Activity "正在下载" -Status "已完成 $($response.BaseResponse.ContentLength) 字节"
该方案不依赖第三方工具,-PassThru确保响应对象被完整捕获,后续可校验StatusCode是否为200。










