반응형
4xx / 5xx에서 예외를 throw하지 않고 Powershell 웹 요청
웹 요청을 만들고 응답의 상태 코드를 검사하는 데 필요한 powershell 스크립트를 작성 중입니다.
나는 이것을 쓰려고 시도했다.
$client = new-object system.net.webclient
$response = $client.DownloadData($url)
뿐만 아니라 :
$response = Invoke-WebRequest $url
그러나 웹 페이지에 성공 상태 코드가 아닌 상태 코드가있을 때마다 PowerShell은 계속 진행하여 실제 응답 개체를 제공하는 대신 예외를 throw합니다.
페이지가로드되지 않은 경우에도 페이지의 상태 코드를 얻으려면 어떻게해야합니까?
이 시도:
try { $response = Invoke-WebRequest http://localhost/foo } catch {
$_.Exception.Response.StatusCode.Value__}
이것이 예외를 던지는 것은 다소 안타까운 일이지만 그게 그렇습니다.
댓글 별 업데이트
이러한 오류가 여전히 유효한 응답을 반환하는지 확인하기 위해 이러한 유형의 예외를 캡처 WebException
하고 관련 Response
.
예외에 대한 응답은 유형 System.Net.HttpWebResponse
이므로 성공적인 Invoke-WebRequest
호출 의 응답 은 유형 Microsoft.PowerShell.Commands.HtmlWebResponseObject
이지만 두 시나리오에서 호환 가능한 유형을 반환하려면 성공적인 응답의을 가져와야 BaseResponse
합니다 System.Net.HttpWebResponse
. 이 역시 유형 입니다.
이 새로운 응답 유형의 상태 코드는 [system.net.httpstatuscode]
단순한 정수가 아닌 유형의 열거 형 이므로 명시 적으로 int로 변환하거나 Value__
위에서 설명한대로 해당 속성에 액세스 하여 숫자 코드를 가져와야합니다.
#ensure we get a response even if an error's returned
$response = try {
(Invoke-WebRequest -Uri 'localhost/foo' -ErrorAction Stop).BaseResponse
} catch [System.Net.WebException] {
Write-Verbose "An exception was caught: $($_.Exception.Message)"
$_.Exception.Response
}
#then convert the status code enum to int by doing this
$statusCodeInt = [int]$response.BaseResponse.StatusCode
#or this
$statusCodeInt = $response.BaseResponse.StatusCode.Value__
반응형
'code' 카테고리의 다른 글
iPhone / iPad 앱 코드 난독 화-가능합니까? (0) | 2020.11.15 |
---|---|
어떤 cpan 설치 프로그램이 적합한가요? (0) | 2020.11.15 |
얼마나 많은 null 검사로 충분합니까? (0) | 2020.11.15 |
Rails 작업이 있습니다. 스크립트 / 러너 또는 레이크를 사용해야합니까? (0) | 2020.11.15 |
XPath를 사용하여 텍스트 내용과 속성 값을 기반으로 노드를 어떻게 선택합니까? (0) | 2020.11.15 |