如何在 Powershell 中使用反射更改 HttpWebRequest headers?

How to use reflection to change HttpWebRequest headers in Powershell?

我需要使用受 .NET 限制的 Powershell (v2) 创建具有特定 headers 的 HttpWebRequest。我读了另一个 post,这是在 C# 中完成的,但我 运行 很难在 Powershell

中实现相同的目标

这是我目前根据上面的 link 得出的结果:

$httpWebRequest = [System.Net.HttpWebRequest][System.Net.WebRequest]::Create($url)
[System.Reflection.BindingFlags]$bflags = [Reflection.BindingFlags]"NonPublic" -bor [Reflection.BindingFlags]"Instance" -bor [Reflection.BindingFlags]"InvokeMethod"
$httpWebRequest.Headers.GetType().InvokeMember("ChangeInternal", $bflags, $null, $httpWebRequest.Headers, @{"Host" = "www.example.com"})

不幸的是,Powershell 的错误响应如下:

Exception calling "InvokeMember" with "5" argument(s): "Method 'System.Net.WebHeaderCollection.ChangeInternal' not found."

我应该如何调用“ChangeInternal”?我遇到的错误是否与错误的程序集版本有关?

InvokeMember的最后一个参数是一个参数数组,ChangeInternal有两个参数,名称和值。发生错误是因为反射找不到接受单个参数的名为 ChangedMember 的方法。使用这个:

$httpWebRequest.Headers.GetType().InvokeMember("ChangeInternal", $bflags, $null, $httpWebRequest.Headers, @("Host", "www.example.com"))