Ano passado eu escrevi um script para diagnosticar problemas comuns de configuração do IIS, ele está no GitHub , para isso eu precisei analisar a resposta do servidor, mesmo para resultados não-200, especialmente para resultados não-200, portanto, Invoke-WebRequest
não funcionou.
Eu removi algumas coisas e o código essencial está abaixo.
Eu uso o .NET System.Net.WebRequest
porque, mesmo se um System.Net.WebException
for lançado, você ainda poderá acessar o fluxo de resposta com os cabeçalhos de resposta e o corpo.
$url = "http://localhost"
try {
$r = [System.Net.WebRequest]::Create($url)
$r.UserAgent=$userAgent
$resp = $r.GetResponse()
Write-host "Response Headers:"
foreach ($HeaderKey in $resp.Headers) {
$caption = $HeaderKey.PadLeft(15," ")
Write-host "$caption': $($resp.Headers[$HeaderKey])";
}
$reqstream = $resp.GetResponseStream()
$sr = New-Object System.IO.StreamReader $reqstream
$body = $sr.ReadToEnd()
Write-host "$body"
$resp.StatusCode
}
catch [System.Net.WebException]
{
$resp = $_.Exception.Response
if ($resp -eq $null)
{
Write-host $_.Exception
}
else
{
$reqstream = $resp.GetResponseStream()
$sr = New-Object System.IO.StreamReader $reqstream
$body = $sr.ReadToEnd()
Write-host -Text "Response Headers:"
Echo " Status: $([int]$resp.StatusCode) - $($resp.StatusCode)"
foreach ($HeaderKey in $resp.Headers) {
$caption = $HeaderKey.PadLeft(15," ")
Write-host "$caption': $($resp.Headers[$HeaderKey])";
}
Write-host "$body"
$resp.StatusCode
}
} catch {
Write-host $_.Exception
}