WinHttp - wie besucht man eine zweite Seite (Server) richtig?

  • Hallo,
    alle WinHttp Beispiele die ich bis jetzt gefunden habe, waren immer sehr simpel.
    z.B.:

    [autoit]

    #include "WinHttp.au3"

    [/autoit][autoit][/autoit][autoit]

    Global $hOpen = _WinHttpOpen()
    Global $hConnect = _WinHttpConnect($hOpen, "autoit.de")
    Global $hRequest = _WinHttpSimpleRequest($hConnect)
    FileWrite(@ScriptDir & "\hRequest_Beispiel.html", $hRequest)

    [/autoit][autoit][/autoit][autoit]

    _WinHttpCloseHandle($hRequest)
    _WinHttpCloseHandle($hConnect)
    _WinHttpCloseHandle($hOpen)

    [/autoit]

    Wie sollte man aber vorgehen, wenn danach eine zweite Seite angesteuert werden soll?
    Lieber alles schließen oder können die Handles solange offen bleiben?
    Gibt es dann früher oder später vielleicht Probleme?

    [autoit]

    #include "WinHttp.au3"

    [/autoit][autoit][/autoit][autoit]

    Global $hOpen = _WinHttpOpen()

    [/autoit][autoit][/autoit][autoit]

    ;~ erster Connect:
    Global $hConnect = _WinHttpConnect($hOpen, "autoit.de")
    Global $hRequest = _WinHttpSimpleRequest($hConnect)
    FileWrite(@ScriptDir & "\hRequest_AutoIt_de.html", $hRequest)

    [/autoit][autoit][/autoit][autoit]

    ;~ zweiter Connect:
    Global $hConnect = _WinHttpConnect($hOpen, "google.com")
    Global $hRequest = _WinHttpSimpleRequest($hConnect)
    FileWrite(@ScriptDir & "\hRequest_Google_com.html", $hRequest)

    [/autoit][autoit][/autoit][autoit]

    _WinHttpCloseHandle($hRequest)
    _WinHttpCloseHandle($hConnect)
    _WinHttpCloseHandle($hOpen)

    [/autoit]

    Mein zweites Beispiel funktioniert jedenfalls.
    Aber ich hätte ganz gerne noch die Meinung von euch Profis :)

    Gruß
    Mirko

  • Ich bin mir nicht ganz sicher wie WinHTTP damit umgeht, aber nach dem was ich gelesen habe sind mehrere Verbindungen gleichzeitig kein Problem.
    Laut MSDN (wenn ich das richtig verstanden habe) kann es zu Problemen kommen wenn du ein Request sendest und dann noch eine weitere Aktion ausführst bevor du ReceiveResponse benutzt hast... In den meisten Fällen sollte dich das aber nicht einschränken. Ich würde es einfach der Reihe nach machen, und alle nötigen Verbindungen am Anfang öffnen und am Ende schließen (falls sie öfter genutzt werden). Wenn du es genau wissen willst, musst du leider noch auf jemanden warten der sich da besser auskennt. ^^
    Du könntest auch einfach mal testen wie WinHTTP mit solchen Fällen umgeht.

  • Was ich aber in jedem Fall machen würde an deiner Stelle:

    Überschreib dir nicht die Handles durch die erneute Nutzung der selben Variable, denn sonst kannst du immer nur die letzte Verbindung sauber trennen.

  • name22
    Danke, dass ist schon mal schön zu wissen, dass WinHTTP auch für mehrere Verbindungen geeignet ist.

    misterspeed
    Super! Dankeschön.
    Ich dachte erst, dass dann die komplette Session überschrieben wird...
    Zum Glück hast du mich früh genug darauf hingewiesen, bevor ich mir den Unfug angewöhnt habe ^^