如何在PowerShell的Invoke-WebRequest中设置重复请求头?
PowerShell中添加重复HTTP请求头的解决方法
PowerShell的哈希表(@{})不允许存在重复键,所以直接在哈希表中定义两个相同的X-Forwarded-Host头会触发DuplicateKeyInHashLiteral错误。要实现重复请求头,有两种可靠的方法:
方法一:使用WebHeaderCollection类
System.Net.WebHeaderCollection是专门处理HTTP请求头的类,支持同一个头字段添加多个值,是最标准的解决方案:
# 创建WebHeaderCollection实例 $headers = New-Object System.Net.WebHeaderCollection # 添加常规请求头 $headers.Add('content-type', 'application/json') $headers.Add('authorization', 'token') # 重复添加X-Forwarded-Host头 $headers.Add('X-Forwarded-Host', 'mywebsite.com') $headers.Add('X-Forwarded-Host', 'mywebsite.com') # 调用Invoke-WebRequest时传入该头集合 Invoke-WebRequest -Uri "https://目标地址" -Headers $headers -Method Post -Body $bodyContent
方法二:将头值设为数组(兼容性需验证)
部分场景下,可以将重复头的值设为数组,PowerShell会自动将其拼接为逗号分隔的字符串发送,部分服务器能识别为多个同名字段:
$headers = @{ 'content-type' = 'application/json' 'authorization' = 'token' # 用数组存储多个相同头的值 'X-Forwarded-Host' = @('mywebsite.com', 'mywebsite.com') } Invoke-WebRequest -Uri "https://目标地址" -Headers $headers -Method Post -Body $bodyContent
注意:这种方式的兼容性取决于服务器对逗号分隔头值的解析逻辑,WebHeaderCollection的方法兼容性更强,优先推荐。
内容的提问来源于stack exchange,提问作者nomiks
相关产品推荐
相关产品推荐

