Powershell - 如何从 web-request 的 error-response 接收大 response-headers?

Powershell - How to receive large response-headers from error-response of a web-request?

我正在寻找解析给定 web-service 的 error-response 的解决方案。 下面的示例通常效果很好,但如果响应大于 64kb,则内容在异常中根本不可用。

我看到一些解决方案建议使用 webHttpClient 并在此处增加 MaxResponseContentBufferSize,但对于给定的 WebClient-object 我该如何做到这一点? 是否有任何选项可以像下面的 TLS12 设置一样全局更改所有 net-webcalls 的 BufferSize?

这是我的 sample-code:

# using net-webclient to use individual user-side proxy-settings:
$web = new-object Net.WebClient
[Net.ServicePointManager]::ServerCertificateValidationCallback = {$true}
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12

$url = "address to web-service"
try {
    $response = $web.DownloadString($url)
} catch [System.Net.WebException] {

    # this part needs to work even if the error-response in larger than 64kb
    # unfortunately the response-object is empty in such case

    $message = $_.Exception.Response
    $stream = $message.GetResponseStream()
    $reader = new-object System.IO.StreamReader ($stream)
    $body = $reader.ReadToEnd()
    write-host "#error:$body"
}

我最后通过切换到 system.net.httpclient 解决了这个问题。 这样我仍然尊重任何自定义 proxy-settings 并且在任何 error-response 中也避免上述 64kb 限制。这里有一个如何使用它的示例:

$url  = "address to web-service"
$cred = Get-Credential

# define settings for the http-client:
Add-Type -AssemblyName System.Net.Http
$ignoreCerts = [System.Net.Http.HttpClientHandler]::DangerousAcceptAnyServerCertificateValidator
$handler = [System.Net.Http.HttpClientHandler]::new()
$handler.ServerCertificateCustomValidationCallback = $ignoreCerts
$handler.Credentials = $cred
$handler.PreAuthenticate = $true

$client = [System.Net.Http.HttpClient]::new($handler)
$client.Timeout = [System.TimeSpan]::FromSeconds(10)

$result = $client.GetAsync($url).result
$response = $result.Content.ReadAsStringAsync().Result
write-host $response