Редактировать : Сначала я неправильно понял вопрос, но оказалось, что вы можете получить заголовок ответа, используя метод HttpWebResponse.GetResponseHeader()
.Если возникает исключение, метод HttpWebRequest.GetResponse()
возвращает $null
, и вы должны использовать этот код для извлечения объекта HttpWebResponse, чтобы вы могли вызвать GetResponseHeader()
для него:
# If an exception occurs, get the HttpWebResponse object from the WebException object
$HttpWebResponse = $Error[0].Exception.InnerException.Response;
Я уверен, что вы захотите придерживаться System.Net.HttpWebRequest
вместо System.Net.WebClient
объекта.Вот пример, похожий на то, что вы, вероятно, уже имеете:
# Create a HttpWebRequest using the Create() static method
$HttpWebRequest = [System.Net.HttpWebRequest]::Create("http://www.google.com/");
# Get an HttpWebResponse object
$HttpWebResponse = $HttpWebRequest.GetResponse();
# Get the integer value of the HttpStatusCode enumeration
Write-Host -Object $HttpWebResponse.StatusCode.value__;
Метод GetResponse () возвращает объект HttpWebResponse
, который имеет свойство с именем StatusCode
, которое указывает на значение вHttpStatusCode
.NET перечисление.Как только вы получите ссылку на перечисление, мы используем свойство value__
, чтобы получить целое число, связанное с возвращенным значением перечисления.
Если вы получите нулевое значение из метода GetResponse()
, то вызахочу прочитать самое последнее сообщение об ошибке в вашем блоке catch {..}.Свойство Exception.ErrorRecord
должно быть наиболее полезным.
try {
$HttpWebResponse = $null;
$HttpWebRequest = [System.Net.HttpWebRequest]::Create("http://www.asdf.com/asdf");
$HttpWebResponse = $HttpWebRequest.GetResponse();
if ($HttpWebResponse) {
Write-Host -Object $HttpWebResponse.StatusCode.value__;
Write-Host -Object $HttpWebResponse.GetResponseHeader("X-Detailed-Error");
}
}
catch {
$ErrorMessage = $Error[0].Exception.ErrorRecord.Exception.Message;
$Matched = ($ErrorMessage -match '[0-9]{3}')
if ($Matched) {
Write-Host -Object ('HTTP status code was {0} ({1})' -f $HttpStatusCode, $matches.0);
}
else {
Write-Host -Object $ErrorMessage;
}
$HttpWebResponse = $Error[0].Exception.InnerException.Response;
$HttpWebResponse.GetResponseHeader("X-Detailed-Error");
}
http://msdn.microsoft.com/en-us/library/system.net.httpwebrequest.aspx
http://msdn.microsoft.com/en-us/library/system.net.httpstatuscode.aspx
http://msdn.microsoft.com/en-us/library/system.net.httpwebresponse.aspx