Fehlerabfrage WebRequest, HTTPStatusCode

  • VB.NET

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Fehlerabfrage WebRequest, HTTPStatusCode

    Hallo,

    ich habe eine Frage zu der ich zwar schon diverse Beiträge hier gefunden habe aber nicht weiterkomme. Und zwar habe ich diverse Programme wo ich widerholt bestimmte Daten verschiedener Internetseiten abfrage. Bei beiden Programmen kommt es früher oder später zum Absturz. Da ich eines auch mal im Debugger habe laufen lassen konnte ich das WebResponse anschauen und vermute deswegen, das man den Fehler abfangen könnte wenn man den HTTP Status Code abfragt. Bei dem Prgorammabsturz im Debugger konnte ich feststellen das dieser nicht 200 sondern in diesem Fall 500 war.
    Da es nicht an einer fehlerhaften URL liegt vermute ich eher das der Server bzw die Seite in diesem einen Fall (1 von mehreren hundert) einfach nicht schnell genug geantwortet hat. Deswegen will ich die Funktion so abwandeln, das in dem fall wenn der Status Code nicht 200 ist einfach die Abfrage nochmal ausführt. Ich habe die bisherigre Funktion schon um Try Catch erweitert wie ich es hier gefunden habe.

    VB.NET-Quellcode

    1. Public Function APIAbfrage(URL As String) As String
    2. Dim hReq As HttpWebRequest = DirectCast(HttpWebRequest.Create(URL), HttpWebRequest)
    3. Dim hRes As HttpWebResponse
    4. Try
    5. hReq = DirectCast(HttpWebRequest.Create(URL), HttpWebRequest)
    6. hRes = DirectCast(hReq.GetResponse(), HttpWebResponse)
    7. Catch ex As WebException
    8. ex.???? 'wo kann ich hier einen HTTP StausCode abfragen
    9. End Try
    10. Dim s As Stream = hRes.GetResponseStream()
    11. Dim sR As New StreamReader(s)
    12. Dim webPage As String = sR.ReadToEnd()
    13. sR.Close()
    14. s.Close()
    15. sR = Nothing
    16. s = Nothing
    17. hReq = Nothing
    18. hRes = Nothing
    19. APIAbfrage = webPage
    20. End Function


    Das Problem ist jetzt in welcher Eigenschaft der Webexception der Staus Code (wenn überhaupt) verborgen ist oder wie man das Webexception sonst nutzen könnte um einen nicht korrekte Antwort zu identifizieren. Dann würde ich das einfach mit if abfragen und um die ganze Funkion eine Schleife machen die einfach im Falle eines Fehlers alles nochmal ausführt.

    Danke im voraus
    So bekommst du ein HTML-Text wie auch den Fehlercode.

    VB.NET-Quellcode

    1. Try
    2. Dim hReq As HttpWebRequest = DirectCast(HttpWebRequest.Create("https://vb-paradise.de"), HttpWebRequest)
    3. Dim hRes As HttpWebResponse = DirectCast(hReq.GetResponse(), HttpWebResponse)
    4. Catch ex As WebException
    5. Dim response As HttpWebResponse = DirectCast(ex.Response, HttpWebResponse)
    6. MessageBox.Show(CInt(response.StatusCode).ToString)
    7. MessageBox.Show(response.StatusCode.ToString)
    8. MessageBox.Show(ex.Status.ToString)
    9. Using r As StreamReader = New StreamReader(response.GetResponseStream())
    10. MessageBox.Show(r.ReadToEnd)
    11. End Using
    12. End Try

    @harmenrabb hatte nochmal editiert.

    Cloud Computer? Nein Danke! Das ist nur ein weiterer Schritt zur totalen Überwachung.
    „Wer die Freiheit aufgibt, um Sicherheit zu gewinnen, wird am Ende beides verlieren.“
    Benjamin Franklin

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „NoIde“ ()

    @harmenrabb Setz in den Catch-Zweig nen Haltepunkt und sieh Dir den Inhalt von ex an.
    Lerne zu debuggen: Debuggen, Fehler finden und beseitigen
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Vollzitat entfernt. ~Trade
    Genau so wollte ich es ja machen, da ich dann allerdings abwarten muss wann mal so ein zufälliger Fehler kommt, was nach ein paar Minnuten aber auch nach ein paar Stunden oder Tagen passieren kann, habe ich halt nachgefragt ob jemand weiß in welcher der ganzen Eigenschaften der WebException das steht.

    Habe es möglicherweise jetzt noch anders gelöst, da ich ja im Falle eines Fehlers einfach dieselbe Abfrage nochmal durchführen will, die Art des Fehlers aber egal ist, habe ich einfach in den Catch-Zweig einen Merker gesetzt und um das ganze eine Schleife gesetzt, die mir die Abfrage einfach wiederholt solange der Merker einen Fehler anzeigt. Bei einer erfolgreichen Abfrage wird der Catch-Teil ja nicht durchlaufen und der Merker nicht gesetzt.
    Habe es jetzt mal so abgeändert und lasse es gerade mal zum testen laufen

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Trade“ ()

    harmenrabb schrieb:

    wann mal so ein zufälliger Fehler kommt
    Warum steht das nicht in Post #1?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @harmenrabb Missverständnis.
    Ich meinte zufällig im Gegensatz zu reproduzierbar.
    Wenn Du einen Fehler (permanent) reproduzieren kannst, kann man ihn effektiv bekämpfen.
    Wenn er nur sporadisch kommt, ist das ein echtes Problem.
    [OT]Ich hatte mal an einer Messmaschine folgenden Effekt: Es wurden Winkel angefahren, um einen Bogen zu vermessen.
    Jede Woche knallte es etwa ein Mal, nicht reproduzierbar. Da war ich ca. 2 Wochen auf der Jagd. Bei einem bestimmten Winkel schaltete der Messmodus um, und wenn da noch eine andere Bedingung zutraf, kam ein negativer Fehlercode, der als (positiver) Arrayindex verwendet wurde... [/OT]
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!