2017-09-28 8 views
0

Ich verwende eine Standard [System.Net.WebRequest] Klasse, um den HTTP-Antwortcode einer bestimmten URL zurückzugeben.Powershell - URL mit Login abfragen und HTTP-Status zurückgeben

Die URL verweist auf einen internen Webanwendungsserver, der den Fehler "401 nicht autorisiert" zurückgibt. Dies ist tatsächlich in Ordnung, da das Dienstkonto, das das Skript ausführt, kein gültiges Konto für die Anwendung hat. Ich bin jedoch mehr daran interessiert, dass die Website reagiert. Ich nahm jedoch an, dass dies eine HTTP-Antwort an sich ist, so dass ich das verwalten konnte, aber stattdessen als Nullwert zurückgegeben wurde.

$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."

(Ich verwende Google in diesem Beispiel, das unsere Server den Zugriff auf externe Websites blockiert werden).

So kann ich nicht bis $HTTP_Status = [int]$HTTP_Response.StatusCode in den Code gelangen, weil 400 Fehler nicht als Code akzeptiert wird.

Wie kann ich eine 401 (oder 407 in diesem Beispiel) in der Abfrage akzeptieren?

Danke

+0

Also wenn ich es richtig verstehe, können Sie den Statuscode wegen der 401 Unauthrised nicht erreichen? Ist das was du sagst? Ich denke, das ist Absicht. Das System leitet Sie zur Seite 401 weiter, die nur begrenzte Daten enthält. (zitieren Sie mich nicht auf diesem tho). Nachdem Sie gesagt haben, dass das System versucht hat, Ihre Anmeldeinformationen zu überprüfen, würden Sie daraus schließen, dass der Server immer noch online und aktiv ist. – Snak3d0c

+0

.net "hilft" Ihnen durch Proxy/generiert einen Fehler, wenn Ihr Web-Aufruf einen Fehlerstatus zurückgibt. Sie müssen Ihren Code in einen [Versuch fangen] (https://stackoverflow.com/questions/35986647/how-do-i-get-the-body-of-a-web-request-that-returned-400) wickeln -bad-request-from-invoke/44000376 # 44000376), um die Verarbeitung fortzusetzen, sobald der Fehler generiert wurde. – brendan62269

+0

Snak3d0c - ja, genau das versuche ich zu sagen, und ja, die Tatsache, dass es die Zugangsdaten verarbeitet hat, legt nahe, dass die Website tatsächlich antwortet, aber ich bekomme keine 200 OK. Die URL bringt mich zum /login.aspx-Bildschirm, aber es meldet sich automatisch aus irgendeinem Grund an, den ich nicht verstehe, und gibt mir deshalb den 401 Fehler – JDGEEK

Antwort

1

Got it!

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