You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Postman转PowerShell实现WebSocket连接遇403错误求助

解决PowerShell WebSocket连接403 Forbidden问题

根据你提供的信息,Postman能正常建立WebSocket连接但PowerShell脚本报错403,核心问题大概率是请求头缺失或异步操作未正确处理,以下是具体排查和修复方案:

可能的原因及对应解决方法

1. 异步连接未等待完成

原脚本中ConnectAsync是异步操作,直接执行后未等待完成,可能导致错误捕获不完整,也可能影响头信息的正确发送。

2. 缺少Postman自动添加的标准请求头

Postman会自动注入User-Agent、Origin等标准请求头,而System.Net.WebSockets.ClientWebSocket默认不会发送这些,部分服务器会验证这些头信息,缺失则返回403。

3. Token格式存在隐藏问题

需确保$token变量无多余空格、换行符,比如获取Token时未做Trim()处理,导致Bearer后面的Token格式无效。

修复后的PowerShell脚本

$url = "ws://myserver/test/test"
# 确保Token无多余字符
$bearer = "Bearer $($token.Trim())"
$WS = New-Object System.Net.WebSockets.ClientWebSocket
$CT = New-Object System.Threading.CancellationToken

# 复制Postman中的请求头(根据实际情况调整)
$WS.Options.SetRequestHeader("Authorization", $bearer)
$WS.Options.SetRequestHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36")
# 如果Postman请求中有Origin头,取消注释并添加
# $WS.Options.SetRequestHeader("Origin", "http://your-postman-origin")

# 等待异步连接完成并捕获错误
try {
    $connTask = $WS.ConnectAsync($url, $CT)
    $connTask.Wait() # PowerShell 7+可改用 await $connTask

    if ($WS.State -eq [System.Net.WebSockets.WebSocketState]::Open) {
        Write-Host "WebSocket连接成功"
    } else {
        Write-Host "连接失败,当前状态:$($WS.State)"
    }
} catch {
    Write-Error "连接出错:$_"
}

额外排查步骤

  1. 对比Postman请求头:打开Postman的WebSocket连接控制台,查看发送的所有请求头,确保PowerShell脚本中完全复制这些头信息(除了Postman自动生成的无关头)。
  2. 验证Token有效性:将脚本中的$bearer值复制到Postman中测试,确认Token仍能正常授权。
  3. 检查服务器日志:如果有权限,查看服务器端的403错误日志,明确拒绝原因(比如缺少特定头、Token权限不足等)。

内容的提问来源于stack exchange,提问作者Matthias Wessner

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 14:50:53