Problem bei Login mit WinHTTP

  • Guten Abend zusammen,

    ich habe ein Problem beim Login auf einer Seite über WinHTTP. Leider weis ich nicht einmal ob's an meinem Code liegt oder am Login Script der Seite. Ich geb Euch mal meine Codeschnipsel...

    Live HTTP Header

    Spoiler anzeigen

    AutoIt Script

    Spoiler anzeigen
    [autoit]


    #include <WinHTTP.au3>

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

    $hSession = _WinHttpOpen("Mozilla/5.0 (Windows NT 6.1; WOW64; rv:5.0) Gecko/20100101 Firefox/5.0")
    $hConnect = _WinHttpConnect($hSession, "http://www2.willstequatschen.de")

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

    $sHTML = _WinHttpSimpleRequest($hConnect, "POST", "/insert/login.php?action=login", "http://www2.willstequatschen.de/la/sites/offline/index.php?x=976199904", "benutzer=Benutzername&pass=Kennwort&secpass=&secure=0")

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

    FileWrite("Request01.html", $sHTML)

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

    $aReturn = StringRegExp($sHTML, 'class="male">\a</span>!', 1)

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

    MsgBox(64, "info", $aReturn & " ergebnis" )

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

    _WinHttpCloseHandle($hConnect)
    _WinHttpCloseHandle($hSession)

    [/autoit]

    Quelltext Login:

    Spoiler anzeigen

    Vielleicht kann mir mal jemand einen Tip geben warum mein Ergebns respektive die Request01.html immer 0 ist. Liegts vllt. an diesem seccheck oder am eingebetteten JavaScipt?

    Danke schonmal im voraus

  • PenGuin, ja stimmt ist auch noch ein Fehler, sollte aber nichts mit dem fehlgeschlagenen Login zu tun haben da ja im vorangehenden FileWrite schon nur eine 0 geschrieben wird

    Sprenger120, was ist ein BEL Zeichen?

  • Ah ok da muss ich nochmal die RegEx definitionen studieren...

    Hab anstatt RegEx jetzt StringInStr genommen

    Spoiler anzeigen
    [autoit]


    $aReturn = StringInStr($sHTML, "benutzername")

    [/autoit]

    nichts desto trotz liegt das Problem ja erstmal am Login, sollte der Login klappen hätte ich ja den Quelltest in der Request01.html, die zeigt allerdings nur folgendes:

    Code
    0

    Von daher würde ich mich lieber erstmal um dem korrekten Login kümmern. Die Console bringt mir jedenfalls beim ausführen keine Fehler oder ähnliches, kann ich irgendwie den Debug Level hochsetzen das er mir die ganzen Return Daten anzeigt ?


    mfg

  • Wenn du in Live HTTP Headers nicht auf Header, sondern auf Generator gehst, kriegst du eine einfache POST Abfrage geliefert. Die kannst du dann so einbauen:

    Live HTTP Headers

    POST /powerq1/login.php loginName=Benutzer&loginPwd=Passwort&btnLogin=Anmelden

    _WinHttp Befehle
    [autoit]

    $hOpen = _WinHttpOpen()
    $hConnect = _WinHttpConnect($hOpen, "192.168.1.233")
    $hRequest = _WinHttpOpenRequest($hConnect, "GET", "/powerq1/login.php")
    _WinHttpSendRequest($hRequest)
    _WinHttpReceiveResponse($hRequest)
    _WinHttpCloseHandle($hRequest)
    $hRequest = _WinHttpOpenRequest($hConnect, "POST", "/powerq1/login.php", "HTTP/1.1")
    _WinHttpSendRequest($hRequest, "Content-Type: application/x-www-form-urlencoded" & @CRLF, "loginName=Benutzer&loginPwd=Passwort&btnLogin=Anmelden")
    _WinHttpReceiveResponse($hRequest)
    _WinHttpCloseHandle($hRequest)

    [/autoit]
  • Habs jetzt mal in den einfachen umgebaut, aber ich bekomm in der req01.html immer nur eine 0 zurück geliefert, obwohl da ja eigentlich der quelltext der willkommensseite stehen sollte. ich bin grad schwer am verzweifeln...

    Spoiler anzeigen
    [autoit]


    #include <WinHTTP.au3>

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

    $hOpen = _WinHttpOpen()
    $hConnect = _WinHttpConnect($hOpen, "http://www2.willstequatschen.de")
    $hRequest = _WinHttpOpenRequest($hConnect, "GET", "/la/sites/offline/index.php")

    _WinHttpSendRequest($hRequest)

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

    MsgBox(0, 0, $hRequest)

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

    _WinHttpCloseHandle($hRequest)
    _WinHttpReceiveResponse($hRequest)

    $hRequest = _WinHttpOpenRequest($hConnect, "POST", "/insert/login.php", "HTTP/1.1")


    _WinHttpSendRequest($hRequest, "Content-Type: application/x-www-form-urlencoded" & @CRLF, "/insert/login.php?action=login benutzer=benutzername&pass=kennwort&secpass=&secure=0")
    _WinHttpReceiveResponse($hRequest)

    FileWrite("req01.html", $hRequest)

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

    _WinHttpCloseHandle($hRequest)

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit]
  • Du musst die Daten auch empfangen, bis jetzt hast du nur einen Request abgeschickt und überprüfst, ob eine Antwort zurück kommt.

    [autoit]

    #include <WinHTTP.au3>

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

    $hOpen = _WinHttpOpen()
    $hConnect = _WinHttpConnect($hOpen, "http://www2.willstequatschen.de")
    $hRequest = _WinHttpOpenRequest($hConnect, "GET", "/la/sites/offline/index.php")

    _WinHttpSendRequest($hRequest)

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

    MsgBox(0, 0, $hRequest)

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

    _WinHttpCloseHandle($hRequest)
    _WinHttpReceiveResponse($hRequest)

    $hRequest = _WinHttpOpenRequest($hConnect, "POST", "/insert/login.php", "HTTP/1.1")


    _WinHttpSendRequest($hRequest, "Content-Type: application/x-www-form-urlencoded" & @CRLF, "/insert/login.php?action=login benutzer=benutzername&pass=kennwort&secpass=&secure=0")
    _WinHttpReceiveResponse($hRequest)

    Local $data = ""
    Do
    $data &= _WinHttpReadData($hRequest)
    Until @error
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $data = ' & $data & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console
    FileWrite("req01.html", $data)
    _WinHttpCloseHandle($hRequest)

    [/autoit]
  • Man mag es kaum glauben aber es hat doch noch funktioniert, es lag wohl am vorangestellten http://

    Spoiler anzeigen
    [autoit]


    $hSession = _WinHttpOpen("")
    $hConnect = _WinHttpConnect($hSession, "www7.willstequatschen.de")

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

    $sHTML_index = _WinHttpSimpleRequest($hConnect, "GET", "/la/sites/offline/index.php")
    FileWrite($path & "_wq_index.html", $sHTML_index)

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

    $sHTML_login = _WinHttpSimpleRequest($hConnect, "POST", "insert/login.php?action=login", "www7.willstequatschen.de", "benutzer=benutzername&pass=kennwort&secpass=&secure=0")
    FileWrite($path & "_wq_login.html", $sHTML_login)

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

    $sHTML_status = _WinHttpSimpleRequest($hConnect, "GET", "/la/sites/suche/status.php")
    FileWrite($path & "_wq_status.html", $sHTML_status)

    [/autoit]

    Soweit so gut, ich bin schonmal froh das der login funktioniert. Damit gleich zur nächsten Frage... Muss ich bei meinem nächsten GET Request eine Session (und damit das Cookie) mit übergeben ?

    Ich vermute mal das Cookie oder sie Session wird mit übergeben da ich ansonsten nicht meine status.php hätte abrufen können, auf der bin ich nämlich noch eingeloggt wenn ich mir den FileWrite anschaue.

    Wäre dieser GET Request eigentlich einem Klick auf den Link gleich zu stellen?

  • So lange $hSession nicht geschlossen wird mit _WinHttpCloseHandle oder das Skript neugestartet wird, werden Session-Cookies automatisch angehängt.

  • Ok das funktioniert auch soweit, allerdings hab ich grad festgestellt das mit dem GET der 26. Seite meine Session beendet wurde. Ich kann praktisch nur 25 Seiten abrufen und danach ist die Session plötzlich weg, gibts dafür eine (für mich) einleuchtende Erklärung?