wie überprüfen, ob ein URL erreichbar ist

  • VB.NET
  • .NET (FX) 4.0

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von Dennis-VB.

    wie überprüfen, ob ein URL erreichbar ist

    ausgelagert aus Prüfen, ob URL erreichbar ~VaporiZed

    Hallo zusammen,

    ich bin auf dieses Thread gekommen. Der Code Beispiel hilft mir sehr weiter.

    VB.NET-Quellcode

    1. Function Check(ByVal url As String, Optional ByVal timeout As Integer = 20000) As Boolean
    2. Dim uri As Uri = Nothing, response As HttpWebResponse = Nothing, request As HttpWebRequest
    3. ' check valid uri
    4. If Not (url.StartsWith("http") OrElse url.StartsWith("https")) Then url = "http://" & url
    5. ' create webrequest
    6. Try
    7. request = CType(WebRequest.Create(url), HttpWebRequest)
    8. request.Method = "HEAD" : request.Timeout = timeout
    9. response = CType(request.GetResponse, HttpWebResponse)
    10. ' header enthalten zum beispiel die Länge der Datei
    11. Dim headers = response.Headers ' nicht benötigt
    12. Debug.Print(headers.ToString) ' nicht benötigt
    13. Catch ex As WebException
    14. Debug.Print("Exception;: {0}", ex.Status)
    15. ' 404
    16. If ex.Status = WebExceptionStatus.ProtocolError Then Return (False)
    17. ' rethrow
    18. Throw
    19. Finally
    20. If response IsNot Nothing Then response.Close()
    21. End Try
    22. ' all OK
    23. Return True
    24. End Function

    Ich bräuchte eine kleine Unterstützung hierzu, in Bezug auf die Timeout.
    Ich spreche einen privaten Server an, bekomme zwar den Code 404 nicht (das soll aber weiterhin im Code verbleiben), jedoch löst die timeout aus => was auch richtig ist.

    Nun meine Frage, wie kann ich die timeout abfangen, am besten mit zusätzlichen Variablen wie z.B.
    Dim bTimeout as Boolean

    Somit soll die Funktion an sich "Return" True oder False liefern und zusätzlich die "bTimeout" True oder False

    Vielen Dank

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

    @Dennis-VB Willkommen im Forum.
    Ein Timeout löst eine TimeoutException aus.
    Fange genau diese ab und tue da das, was zu tun ist.
    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!
    @ RodFromGermany
    Vielen Dank für den Hinweis.
    Bitte nicht übelnehmen, bin ein kompletter neu Einsteiger.

    Müsste ich es dann mit *Catch ex As TimeoutException* abfangen?

    Ich habe mir zwar diese Informationen angeschaut, leider konnte es nicht zusammen bringen
    https://docs.microsoft.com/de-de/dotnet/api/system.serviceprocess.timeoutexception?view=dotnet-plat-ext-6.0

    PS: Und vielen Dank für die Begrüßung. Lese schon seit eine weile mit und probiere vieles aus, muss aber noch einiges lernen.
    Ebenfalls willkommen im Forum.

    Grundsätzlich sollte Deine Idee klappen, aber dann gibt es eine Namenkollision, von daher z.B. Catch TOEx As TimeoutException.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    Dennis-VB schrieb:

    Müsste ich es dann mit *Catch ex As TimeoutException* abfangen?
    Genau das:

    VB.NET-Quellcode

    1. Try
    2. request = CType(WebRequest.Create(url), HttpWebRequest)
    3. request.Method = "HEAD" : request.Timeout = timeout
    4. response = CType(request.GetResponse, HttpWebResponse)
    5. ' header enthalten zum beispiel die Länge der Datei
    6. Dim headers = response.Headers ' nicht benötigt
    7. Debug.Print(headers.ToString) ' nicht benötigt
    8. Catch ex As WebException
    9. Debug.Print("Exception;: {0}", ex.Status)
    10. ' 404
    11. If ex.Status = WebExceptionStatus.ProtocolError Then Return False
    12. ' rethrow
    13. Throw
    14. Catch ex As TimeoutException
    15. MessageBox.Show("TimeoutException")
    16. Return False
    17. Finally
    18. If response IsNot Nothing Then response.Close()
    19. End Try

    VaporiZed schrieb:

    aber dann gibt es eine Namenkollision
    Nö.


    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!
    Vielen Dank für euren zahlreichen support, leider funktioniert es nicht
    Bekomme weiterhin den Fehler

    Quellcode

    1. ************** Ausnahmetext **************
    2. System.Net.WebException: The operation has timed out.
    3. at System.Net.HttpWebRequest.GetResponse()
    4. at UpdateTool.HTTPRequest.FileExist(String url, Int32 timeout) in D:\xxx\UpdateTool\HTTPRequest.vb:line 50
    5. at UpdateTool.frmBrand.btnReadCurrentStand_Click(Object sender, EventArgs e) in D:\xxx\UpdateTool\frmBrand.vb:line 185
    6. at System.Windows.Forms.Control.OnClick(EventArgs e)
    7. at System.Windows.Forms.Button.OnClick(EventArgs e)
    8. at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
    9. at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
    10. at System.Windows.Forms.Control.WndProc(Message& m)
    11. at System.Windows.Forms.ButtonBase.WndProc(Message& m)
    12. at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
    13. at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, WM msg, IntPtr wparam, IntPtr lparam)


    Die line 50 in dem Fehlercode ist die line 4 in dem Beispiel Code im Betrag oben drüber.

    Habt ihr einen Rat warum es via Catch nicht abgefangen wird?

    Dennis-VB schrieb:

    System.Net.WebException: The operation has timed out.
    Was hat diese Exception für einen ex.Status?
    im Gegensatz zu:

    VB.NET-Quellcode

    1. If ex.Status = WebExceptionStatus.ProtocolError Then Return False

    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!
    Ich hoffe ich kann die richtigen Antworten liefern. Wenn ich es via MessageBox ausgebe, bekomme ich folgende Informationen

    MessageBox.Show(ex.Status) => 14
    MessageBox.Show(WebExceptionStatus.ProtocolError) => 7

    PS: Gerade herausgefunden das ich es so abfangen kann

    VB.NET-Quellcode

    1. Catch ex As WebException
    2. Debug.Print("Exception;: {0}", ex.Status)
    3. ' 404
    4. If ex.Status = 14 Then Return (False)
    5. ' rethrow
    6. Throw
    7. Finally

    => Ohne Timeout Exception, aber ob es so richtig ist ?

    Dennis-VB schrieb:

    Ohne Timeout Exception
    Nimm das als TimeOut.

    Dennis-VB schrieb:

    System.Net.WebException: The operation has timed out.
    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!
    Ah, interessant. Ich dächt, dass alle Exception-aufnehmenden Variablen früher noch je einen anderen Namen haben mussten. Aber entweder hab ich's damals falsch gemacht oder Mikrosaft hat's geändert. Und das mit dem parameterlosen Throw (was einen Rethrow der gecatchten Exception bedeutet) kannte ich auch noch nicht.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.