Feststellen, ob URL erreichbar ist - Auch mit Proxy

  • VB6

Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von Unknown.

    Feststellen, ob URL erreichbar ist - Auch mit Proxy

    In einem Programm überprüfe ich mittels der "IcmpEcho" API (Ping), ob eine URL erreichbar ist. Nur funktioniert ein Ping wohl nicht über einen Proxy. Wie kann ich dennoch prüfen, ob der Server erreichbar ist?
    Besucht auch mein anderes Forum:
    Das Amateurfilm-Forum
    Leider funktioniert das nicht.

    Quellcode

    1. If InternetConnect(0, "forum.marcus-graefe.de", INTERNET_DEFAULT_HTTP_PORT, vbNullString, vbNullString, INTERNET_SERVICE_HTTP, 0, 0) <> 0 Then


    Es kommt "0" raus, obwohl die URL definitv erreichbar ist.
    Besucht auch mein anderes Forum:
    Das Amateurfilm-Forum

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()

    Naja, ist auch kein Wunder dein 1. Parameter ist auch
    0. Das muss natürlich eine gültige Sessions sein, die
    du zuvor mit InternetOpen erstellt hast. Dabei musst
    du vorallem auf den 2. und 3. Parameter achten,
    da du dort deine Proxy angaben machen musst.
    (Für nähere Informationen, MSDN konsultieren)
    Zudem musst du deine URL auch richtig
    formatieren, sprich ein "http://" vorsetzen.
    Nein, InternetOpen initialisiert nur die wininet.dll
    Pass auf, so kannst du überprüfen ob eine URL verfügbar ist:

    Quellcode

    1. Option Explicit
    2. Private Declare Function InternetCloseHandle Lib "wininet.dll" (ByVal hInternet As Long) As Boolean
    3. Private Declare Function InternetConnect Lib "wininet.dll" Alias "InternetConnectA" _
    4. (ByVal hInternet As Long, ByVal lpszServerName As String, ByVal nServerPort As Integer, _
    5. ByVal lpszUserName As String, ByVal lpszPassword As String, ByVal dwService As Long, ByVal dwFlags As Long, ByVal dwContext As Long) As Long
    6. Private Declare Function InternetOpen Lib "wininet.dll" Alias "InternetOpenA" _
    7. (ByVal lpszAgent As String, ByVal dwAccessType As Long, ByVal lpszProxy As String, ByVal lpszProxyBypass As String, ByVal dwFlags As Long) As Long
    8. Private Sub Form_Load()
    9. MsgBox IsURLAvailable("http://www.gmx.de")
    10. End Sub
    11. Function IsURLAvailable(ByVal strURL As String) As Boolean
    12. Dim lnghInternet As Long
    13. Dim lnghSession As Long
    14. lnghInternet = InternetOpen("Ping", 0, vbNullString, vbNullString, 0)
    15. If lnghInternet <> 0 Then
    16. lnghSession = InternetConnect(lnghInternet, strURL, 0, "", vbNullString, 3, 0, 0)
    17. If lnghSession <> 0 Then
    18. InternetCloseHandle lnghSession
    19. IsURLAvailable = True
    20. End If
    21. End If
    22. End Function
    Ich werde das mal testen, ich hoffe, es klappt. Auf jeden Fall schonmal danke!

    Edit: Klappt leider nicht, die übergebene URL ist nicht erreichbar (Funktion gibt False zurück). Aber die URL ist definitv erreichbar!

    Was soll denn das "Ping" bedeuten? Und ist deine Funktion schon für Proxy Server geschrieben (also mit und ohne Proxy)?
    Besucht auch mein anderes Forum:
    Das Amateurfilm-Forum

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()

    Das "Ping" ist der AgentName, den muss man immer
    angeben, wenn man InternetOpen aufruft (beim IE
    heißt der dann beispielsweise "Microsoft Internet Explorer")
    Und ja sie ist so geschrieben, dass sie eigentlich mit und
    ohne Proxy funktionieren sollte. Bei mir tut sie das auch.
    Allerdings ist das "aus der Registry" auslesen, wie ich
    es in einem Post vorher gesagt hab, nicht so das ganz
    das Wahre: Die Proxy Einstellungen werden nämlich
    unter HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings
    gespeichert (für nähere Infos, siehe auch diesen MSDN Artikel)
    Der Witz ist aber, dass diese Einträge lediglich vom IE
    konfiguriert werden. Sprich: Wenn dein IE richtig
    konfiguriert ist, dann funktioniert auch die automatische Proxy konfiguration
    der wininet.dll.

    Unter den Umständen, bleibt dir wohl nichts anderes
    übrig, als die Proxy manuell rauszufinden! Allerdings gibt
    es einen Weg das ganze automatisch zu machen. Ich
    hab damit jedoch nie gearbeitet, da ich nie Proxys überqueren
    musste ...
    Hier wird die Funktionsweise etwas genauer erklärt.
    Also es klappt nun doch, ich hatte abgefragt:

    if IsURLAvailable ... then
    msgbox "nicht verfügbar"
    end if

    Da fehlt also nur das "Not"! ;)

    Wegen dem Proxy: Wenn das ganze mit und ohne funktioniert, ist ja alles bestens. Ich will ja garnicht den Proxy selbst angeben, es soll einfach immer funktionieren, auf jeden Rechner.
    Besucht auch mein anderes Forum:
    Das Amateurfilm-Forum

    Ich will ja garnicht den Proxy selbst angeben, es soll einfach immer funktionieren, auf jeden Rechner.


    Da Verweise ich nur auf meinen letzen Beitrag:


    Allerdings ist das "aus der Registry" auslesen, wie ich
    es in einem Post vorher gesagt hab, nicht so das ganz
    das Wahre: [...]
    Der Witz ist aber, dass diese Einträge lediglich vom IE
    konfiguriert werden. Sprich: Wenn dein IE richtig
    konfiguriert ist, dann funktioniert auch die
    automatische Proxy konfiguration der wininet.dll.