vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
sevAniGif - als kostenlose Vollversion auf unserer vb@rchiv CD Vol.5  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Ein- und Umsteiger
WebResponse.StatusCode 
Autor: EKrause
Datum: 07.07.19 14:57

Die Überschrift zeigt meine derzeitige Herausforderung.

Ich suche nach einer Möglichkeit, mit dem Gebrauch eines Try-Catch-Blocks den genauen Status-Code (403, 404, 503 o. ä.) herauszufinden.

Der fragliche Block:
    Function Request_Return_("http://WWW.BeispielLink.abc") As Integer
        Dim Http_Num_ As Integer, Pos0_ As Integer, Pos1_ As Integer
        Dim myHttpWebRequest_ As HttpWebRequest, myHttpWebResponse_ As _
          HttpWebResponse
 
        Try
            myHttpWebRequest_ = CType(WebRequest.Create( _
              "http://WWW.BeispielLink.abc"), HttpWebRequest)
            myHttpWebResponse_ = CType(myHttpWebRequest_.GetResponse(), _
            HttpWebResponse)
            myHttpWebResponse_.Close()
        Catch e As WebException
 
        Catch e As Exception
            Console.WriteLine(e.Message)
            Console.WriteLine(ControlChars.NewLine + "The following exception" & _
              "was raised : {0}", e.Message)
        End Try
Request_Return_Exit_:
    End Function
Wenn der Request "gut" ist, als irgendwein 200er Code, geht's zum Close und alles ist in Ordnung...nicht jedoch, wenn da so etwas wie 403, 404, 503 oder so herauskommen würde.
Dann nämlich geht's natürlich in den Catch-Block (WebException, da steht hier nichts, weil mir dazu auch nichts mehr einfällt), und ab dort habe ich bisher nichts, wirklich NICHTS gefunden, was mir die vorgenannten Codes liefern könnte.
Das Einzige, was ich bisher geschafft habe, ist mit einem "behelfsmäßigen" Mid solche Codes aus aus dem e.ToString() zu selektieren, was aber auch nur klappt, wenn der e.Status = 7 (ProtokollError) lautet, aber selbst dann klappt das nicht immer.

Kurzum: Es muss doch ein VB.Net-Boardmittel geben, um dieser Ausnahme
Ausnahme ausgelöst: "System.Net.WebException" in System.dll
im Catch-Block ein adäquates Ergebnis zu entlocken...irgendwie geht mir im Kopf herum, dass auch das ganz einfach ist, ich nur den Wald vor lauter Bäumen nicht sehe

Beitrag wurde zuletzt am 07.07.19 um 15:02:32 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: WebResponse.StatusCode 
Autor: oskar__01
Datum: 08.07.19 08:27

Hi,

such mal nach HttpStatusCode das sollte Dir weiterhelfen.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: WebResponse.StatusCode 
Autor: EKrause
Datum: 08.07.19 09:09

Danke für die Antwort, aber nichts für ungut, aber war ich schon längst.

Der HttpStatusCode ist ein Member von HttpWebResponse, aber eben das geht "verloren", wenn der Code wg. "404" oder "403" o. ä. in den Catch-Block (Catch e As WebException) wechselt, HttpWebResponse ist dort dann "Nothing", also nichts, auch kein HttpStatusCode (HttpWebResponse.Status).
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: WebResponse.StatusCode 
Autor: EKrause
Datum: 08.07.19 11:34

oskar__01 schrieb:
Zitat:

Hi,

such mal nach HttpStatusCode das sollte Dir
weiterhelfen.

Immerhin (sorry für meine etwas "harsch" klingende Antwort oben) hat mich das dazu gebracht, weiter zu graben, obwohl ich das allmählich leid bin, nachdem es keine wirklich guten, kurzen und gleichzeitig verständlichen Erklärungen gibt.

Ich bin meinen Beispielcode nochmal per Debugger durchgegangen, habe im Catch-Block gestoppt, mit dem Direktfenster "?e.Response" aufgerufen und das nachstehende erhalten:
?e.response
{System.Net.HttpWebResponse}
    CharacterSet: "UTF-8"
    ContentEncoding: ""
    ContentLength: -1
    ContentType: "text/html; charset=UTF-8"
    Cookies: {System.Net.CookieCollection}
    Headers: {Pragma: no-cache
X-UA-Compatible: IE=edge
X-Frame-Options: SAMEORIGIN
Upgrade: h2c
Connection: Upgrade, Keep-Alive
Keep-Alive: timeout=5, max=100
Transfer-Encoding: chunked
Cache-Control: max-age=0, no-cache, no-store, must-revalidate
Content-Type: text/html; charset=UTF-8
Date: Mon, 08 Jul 2019 07:42:08 GMT
Expires: Mon, 26 Jul 1997 05:00:00 GMT
Last-Modified: Mon, 08 Jul 2019 07:42:09 GMT
Set-Cookie: wsc_f0ebf7_cookieHash=193eb41035967c0f08e2ddd9223e8e29f149741f; _
  path=/; domain=www.beispiel.de; HttpOnly
Server: Apache/2.4.39
X-Powered-By: PHP/7.2.11
 
}
    IsFromCache: False
    IsMutuallyAuthenticated: False
    LastModified: #7/8/2019 09:42:09 AM#
    Method: "GET"
    ProtocolVersion: {1.1}
    ResponseUri: {http://www.beispiel.de/phpBB2/index.php?account-management/}
    Server: "Apache/2.4.39"
    StatusCode: Forbidden [u]{403}
    StatusDescription: "Forbidden"
    SupportsHeaders: True
[u]"Aber da ist doch der Code, den ich haben will!!!" habe ich laut ausgerufen, obwohl ich allein an meiner Maschine sitze.
Gut, nochmal auf docs.microsoft geschaut, das hier in benannten Block eingebaut (Status 7 ist der Protokollfehler, in welchem die Codes 400 bis 599 enthalten sind)

If e.Status = 7 Then
    Debug.Print("Status Code : {0}", CType(e.Response, _
      HttpWebResponse).StatusCode)
    Debug.Print("Status Description : {0}", CType(e.Response, _
    HttpWebResponse).StatusDescription)
End If
und erneut gedebuggt.
Die Antwort war schon besser

Status Code : Forbidden
Status Description : Forbidden
Aber wie kriege ich nun statt "Forbidden" als Ergebnis "403" dorthin, wo ausdrücklich "Status Code" steht?

Klar, ich kann mit nem Select-Case-Konstrukt die Ausgaben von "Status Code" abfragen und in das gewünschte 3-stellige Zahlenformat bringen...aber auch das muss doch anders gehen
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: WebResponse.StatusCode 
Autor: effeff
Datum: 08.07.19 12:04

Die Erläuterungen findest Du hier: https://de.wikipedia.org/wiki/HTTP-Statuscode

Du kannst die Zuweisungen nun in einer Dictionary, einer DataTable, einer HashTable oder was auch immer speichern und darin suchen.

EALA FREYA FRESENA

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: WebResponse.StatusCode 
Autor: oskar__01
Datum: 08.07.19 13:03

oder versuchs mal damit

Debug.Print("Status Code : {0} ({1})", CType(e.Response, _
HttpWebResponse).StatusCode, CInt((CType(e.Response, HttpWebResponse).StatusCode)))
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: WebResponse.StatusCode 
Autor: EKrause
Datum: 08.07.19 15:05

oskar__01 schrieb:
Zitat:

oder versuchs mal damit

Debug.Print("Status Code : {0} ({1})",
CType(e.Response, _
HttpWebResponse).StatusCode, CInt((CType(e.Response,
HttpWebResponse).StatusCode)))

Sehr schön! Das klappt! Sieht zwar bei mir jetzt etwas vereinfacht aus:

If e.Status = 7 Then
   Http_Num_ = CInt((CType(e.Response, HttpWebResponse).StatusCode))
End If
ist aber genau das, was ich brauche, Http_Num_ beinhaltet in meinem Beispiel (mit "echtem" Link) 403, genau den Code, den der Link verursacht.

Senkschuh vielmals, ich weiß nicht, ob ich durch Versuchen o. ä. drauf gekommen wäre, aber wenn, dann "irgendwann" mal, nicht gleich, auch nicht Heute , und nun muss ich das Rad nicht nochmal erfinden
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel