2017-09-28 21 views
0

표준 [System.Net.WebRequest] 클래스를 사용하여 주어진 URL의 HTTP 응답 코드를 반환합니다.Powershell - 로그인으로 URL 쿼리 및 HTTP 상태 반환

URL이 "401 Unauthorized"오류를 반환하는 내부 웹 응용 프로그램 서버를 가리 킵니다. 스크립트를 실행하는 서비스 계정에 응용 프로그램에 대한 유효한 계정이 없기 때문에 실제로는 정상입니다. 그러나 나는 웹 사이트가 응답하는 것에 더 관심이있다. 그러나이 HTTP 응답을 자체적으로 관리 할 수 ​​있다고 가정했지만 대신 null 값으로 반환했습니다.

$HTTP_Request = [System.Net.WebRequest]::Create('http://google.com') 
$HTTP_Response = $HTTP_Request.GetResponse() 
$HTTP_Status = [int]$HTTP_Response.StatusCode 

Exception calling "GetResponse" with "0" argument(s): "The remote server returned an error: (407) Proxy Authentication Required."

(나는 우리 서버는 외부 사이트에 액세스 차단이 예에서 구글을 사용하고 있습니다).

나는 코드로 400 오류를 허용하지 않으므로 코드에서 $HTTP_Status = [int]$HTTP_Response.StatusCode까지 올 수 없습니다.

검색어에 401 (또는이 예에서는 407)을 어떻게 수락 할 수 있습니까?

감사합니다.

+0

그렇다면 올바른지 알 경우 401 인증되지 않았기 때문에 상태 코드에 연결할 수 없습니까? 그게 당신이 말하는거야? 나는 이것이 의도적으로 생각한다. 제한된 데이터 만 포함 된 401 페이지로 리디렉션됩니다. (그 말에 나를 인용하지 마라). 시스템이 사용자의 자격 증명을 확인하려고 했으므로 서버가 여전히 온라인 상태이고 활성화 상태라고 결론 내릴 수 있습니다. – Snak3d0c

+0

.net은 웹 통화가 오류 상태를 반환 할 때 프록시를 통해 '도움을받습니다.'또는 오류를 생성합니다. [try catch] (https://stackoverflow.com/questions/35986647/how-do-i-get-the-body-of-a-web-request-that-returned-400)에 코드를 래핑해야합니다. -bad-request-from-invoke/44000376 # 44000376) 오류가 생성되면 처리를 계속합니다. – brendan62269

+0

Snak3d0c - 예, 정확히 말하고자하는 것입니다. 예, 자격 증명을 처리하여 웹 사이트가 실제로 응답하고 있음을 나타내지 만 200 OK를 얻지 못합니다. URL은 /login.aspx 화면으로 이동하지만, 자동으로 로그인하여 이해가 안되므로 401 오류가 발생합니다. – JDGEEK

답변

1

알 수 있습니다.

try{ 
    $request = $null 
    $request = Invoke-WebRequest -Uri "<URL>" 
    } 
catch 
    {    
    $request = $_.Exception.Response    
    } 
    $StatusCode = [int] $request.StatusCode; 
    $StatusDescription = $request.StatusDescription;