编辑:我误解了这个问题,在第一,但事实证明,你可以通过使用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
你是否已经捕捉到的异常物体,看着$ _。Exception.Message财产?并探讨了$ _。Exception对象? – 2012-03-03 06:58:30