4xx/5xx에 예외를 던지지 않는 PowerShell 웹 요청
웹 요청을 하고 응답의 상태 코드를 검사해야 하는 파워셸 스크립트를 작성하고 있습니다.
저는 이것을 써 보았습니다.
$client = new-object system.net.webclient
$response = $client.DownloadData($url)
뿐만 아니라 다음과 같습니다.
$response = Invoke-WebRequest $url
그러나 웹 페이지에 성공 상태 코드가 아닌 상태 코드가 있을 때마다 PowerShell은 실제 응답 개체를 제공하는 대신 예외를 적용합니다.
페이지가 로드되지 않을 때도 페이지의 상태 코드를 어떻게 얻을 수 있습니까?
사용해 보십시오.
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__
Powershell 버전 7.0 이후Invoke-WebRequest
갖고 있다-SkipHttpErrorCheck
스위치 매개 변수.
-SkipHttp 오류 검사
이 매개 변수로 인해 cmdlet은 HTTP 오류 상태를 무시하고 응답을 계속 처리합니다.오류 응답은 성공한 것처럼 파이프라인에 기록됩니다.
이 매개 변수는 PowerShell 7에 도입되었습니다.
-SkipHttpErrorCheck
PowerShell 7+에는 가장 적합한 솔루션이지만 아직 사용할 수 없다면 대화형 명령줄 Powershell 세션에 유용한 간단한 대안이 있습니다.
404 반응에 대한 오류 설명이 표시되는 경우, 즉,
원격 서버에서 오류를 반환했습니다. (404) 찾을 수 없습니다.
그런 다음 다음 다음을 입력하여 명령줄에서 '마지막 오류'를 볼 수 있습니다.
$Error[0].Exception.Response.StatusCode
또는
$Error[0].Exception.Response.StatusDescription
또는 'Response' 개체에서 알고 싶은 다른 정보도 있습니다.
언급URL : https://stackoverflow.com/questions/19122378/powershell-web-request-without-throwing-exception-on-4xx-5xx
'programing' 카테고리의 다른 글
Tkinter에서 두 프레임을 전환하시겠습니까? (0) | 2023.05.01 |
---|---|
문자열에서 줄 바꿈을 제거하는 방법 (0) | 2023.05.01 |
유형 오류: _thread.lock 개체를 피클할 수 없습니다. (0) | 2023.05.01 |
네트워크 공유에서 파일을 잠그는 사용자 확인 (0) | 2023.05.01 |
NULL 값을 테이블 끝으로 정렬 (0) | 2023.05.01 |