| |
VB.NET - Ein- und UmsteigerWebResponse.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. | |
Re: WebResponse.StatusCode | | | Autor: oskar__01 | Datum: 08.07.19 08:27 |
| Hi,
such mal nach HttpStatusCode das sollte Dir weiterhelfen. | |
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). | |
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 | |
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 | |
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))) | |
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 | |
| 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 |
|
|
Neu! sevPopUp 2.0
Dynamische Kontextmenüs!
Erstellen Sie mit nur wenigen Zeilen Code Kontextmenüs dynamisch zur Laufzeit. Vordefinierte Styles (XP, Office, OfficeXP, Vista oder Windows 8) erleichtern die Anpassung an die eigenen Anwendung... Weitere InfosTipp des Monats März 2024 Dieter OtterUTF-8 Konvertierung von Dateien und StringsVB6 selbst verfügt über keine Funktionen zur UTF-8 Konvertierung von Daten. Mit Hilfe des ADODB.Stream-Objekts lassen sich diese fehlenden Funktionen aber schnell nachrüsten. Access-Tools Vol.1
Über 400 MByte Inhalt
Mehr als 250 Access-Beispiele, 25 Add-Ins und ActiveX-Komponenten, 16 VB-Projekt inkl. Source, mehr als 320 Tipps & Tricks für Access und VB
Nur 24,95 EURWeitere Infos
|