Internetseite auslesen und dann?

  • Hallo zusammen,

    ich komme für meinen Geschmack ganz gut voran, habe jetzt aber ein Timing Problem

    Code
        ;(3)Benutzername und Passwort senden (POST)
        $sPOST = 'action=login&uname=' & $sBenutzerName & '&password=' & $sPasswort & '&login=login'
        $sPaket = _WinHttpSimpleSSLRequest($hConnect, 'POST', '/LaenderEANV_Web/registrierung', 'https://leanv.zks-abfall.de/LaenderEANV_Web/registrierung?action=displaylogin', $sPOST)
        _FileWrite($sPaket)

    Über eine For - Next Schleife werden aus einem Array für den $sPOST unterschiedliche Zugangsdaten erzeugt.

    Jetzt ist es auch im Browser so, das es dort Postfächer mit viel Content und welche mit wenig Content gibt. Die mit wenig Cotent lassen sich schnell anmelden, die mit viel Content können durchaus auch mal 1 Minute dauern, im dümmsten Fall wird eine Proxy Meldung erzeugt (Browser fliegt weg).

    Ich habe jetzt mit der Zeile $sPaket genau dieses Problem. Es gibt dort einen Account, der braucht wirklich sehr lange. Gibt es eine Möglichkeit _WinHttpSimpleSSLRequest einen Timeout mitzugeben? Aktuell scheint er nicht zu warten und es kommt dann die Meldung Anmeldung fehlgeschlagen - Anmeldename oder Passwort falsch. was aber nicht stimmt.

  • Gibt es eine Möglichkeit _WinHttpSimpleSSLRequest einen Timeout mitzugeben?

    Aus dem Quellcode :

    Gruß Musashi

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

  • So, hier bin ich nochmals. Na ein paar Recherchen bin ich mir ziemlich sicher, das mein Problem wo anderst liegt. Hier mal mein aktuelles Script. Die Benutzernamen und Passwörter stimmen definitiv!

    Aktuelles Script Stand 21.12.2018 - 16:48 Uhr

    In Zeile 124 überprüfe ich den aktuellen Benutzernamen und das Passwort. Hier ist immer alles OK

    Auch die Consolenausgabe (Zeile 126) vom Inhalt der $aPOST Variable passt noch. Aber ab dem 2. Durchlauf hat das Array (Zeile 132) einen anderen Inhalt.

    Hier der Inhalt vom 1. Durchlauf

    und hier das Ergebnis vom 2. Durchlauf

    Ich "hoffe" das ich hier vom Verständis alles richtig mache. Ich melde mich ja auch noch von der Seite ab und schließe die Handle. Das sollte doch reichen, oder?

    Freue mich auf eure Antworten.

    Gruß CodeFun

  • Code
    For $iZeilenZaehler = 1 To UBound($aINI) - 1 ; $iZeilenZaehler ist der Zaehler für die Zeilen
        $sBenutzerName = ($aINI[$iZeilenZaehler][0])
    
        For $iSpaltenZaehler = 1 To UBound($aINI, 2) - 1 ; $iSpaltenZaehler ist der Zaehler für die Spalten                                                                                    $sPasswort = ($aINI[$iZeilenZaehler][$iSpaltenZaehler])
            $iLCount += 1       
              
            ConsoleWrite("Runde " & $iLCount & " hat begonnen => ")
            ZKS_Abfragen()
        Next
    Next

    Man dein Code ist vom Stil her aber alles andere als lesenswert, hab mal das weggeschnippelt was hier für den Fehler nicht von Belang ist (aber dein Stil generell ist verbesserungswürdig).

    Der Fehler ist schnell gefunden, du hast nämlich For-Schleifen verschachtelt. Du versuchst die Accounts durchzugehen aber gehst für jeden Account jede Spalte (Passwort durch).

    Das ist vermutlich nicht richtig. Poste uns doch mal deine Ini-Struktur. Ich schätze mal deine Ini ist so aufgebaut.

    Code
    [Accounts]
    user1=pass1
    user2=pass2

    Dann brauchst du nur einen Zähler, Sektion Accounts auslesen und für jeden Account das Passwort nutzen.

    Ich wette mit dir, dass der 1. Account korrekt ist und danach der 1. Account wieder angemeldet werden soll allerdings mit dem Passwort des 2. Accounts.

    Btw,

    For $iZeilenZaehler = 1 To UBound($aINI) - 1

    Dir ist schon klar, dass in $aIni[0][0] die Anzahl der Elemente enthalten ist und du auf UBound verzichten kannst?

  • Hallo alpines,

    erst mal Danke für die Kritik. Ich bitte meinen schlechten Stil zu verzeichen, da ich nur so zum Spass etwas code und das auch nur alle 1,5 Jahre, d.h. Routine werde ich nie bekommen. Aber Du darfst mir gerne sagen, was ich denn besser machen sollte.

    Die For Schleife mit dem Ubound habe ich von Bugfix's Array Tutorial. Da sich der Inhalt der ini ja erweitern kann, liege ich doch mit dem Ubound nicht so falsch. Du hast den Aufbau der ini richtig erkannt. Ich habe mal das Script so umgebaut, dass ich mit deiner ini arbeite und nur die For Schleife laufen lasse und das Ergebnis in die Console schreibe. In meinen Augen passt hier alles, so bekomme ich es ja auch mit meiner ini dargestellt.

    Hier der Text der Consolenausgabe:

    Benutername ist: user1 mit dem Passwort: pass1

    Benutername ist: user2 mit dem Passwort: pass2

    Benutername ist: user3 mit dem Passwort: pass3

    Benutername ist: user4 mit dem Passwort: pass4

    Von daher verstehe ich nicht, warum ab dem 2. Durchgang es irgendwie nicht mehr passt

  • Die For Schleife mit dem Ubound habe ich von Bugfix's Array Tutorial.

    Du kriegst in [0][0] von der Ini-Funktion bereits die Größe zurückgegeben, du musst nicht extra die Größe erneut anfordern.

    Hmm eigenartig, du kannst mir gerne das Skript mit Beispielszugangsdaten mal schicken und ich kanns von meiner Seite aus testen, ansonsten sehe ich da nichts.

  • Hmm eigenartig, du kannst mir gerne das Skript mit Beispielszugangsdaten mal schicken und ich kanns von meiner Seite aus testen, ansonsten sehe ich da nichts.

    Hallo alpines, vielen Dank für das Angebot, aber hier würde ich bzgl. DSGVO ziemlich Probleme bekommen ;)

    Was ich Dir aber anbieten kann, ist mein Mitschnitt vom Firefox Plugin "HTTP Header Live". Hier habe ich dann die Credentials auf neutral geändert

    Mitschnitt von HTTP Header Live

    Vielleicht muss ich ja noch was mit Cookies machen? Oder beende ich die Sitzung nicht korrekt? Ich finde es halt komisch, das beim unten stehenden ConsoleWrite der Benutzername und das Passwort auch beim 2. Durchgang stimmt, jedoch ich ab 3a feststellen kann, das der Login so nicht funktioniert hat. Ich habe hier eher das Gefühl, das der Logoff Prozess nicht sauber läuft und beim 2. Durchgang noch irgendwas aktiv ist, was den erneuten Login mit neuen Daten verhindert.

    Code
    ;(3)Benutzername und Passwort senden (POST)
    ConsoleWrite("Benutername in der ZKS_Abfrage ist: " & $sBenutzerName & " mit dem Passwort: " & $sPasswort & @CRLF)
    $sPOST = 'action=login&uname=' & $sBenutzerName & '&password=' & $sPasswort & '&login=login'
    ConsoleWrite("$sPOST ist: " & $sPOST & @CRLF)
    $sPaket = _WinHttpSimpleSSLRequest($hConnect, 'POST', '/LaenderEANV_Web/registrierung', 'https://leanv.zks-abfall.de/LaenderEANV_Web/registrierung?action=displaylogin', $sPOST)
    _FileWrite($sPaket) ; schreibe eine Kontroll HTML Datei
    
    ; 3a)An dieser Stelle läuft was schief. Die erste Anmeldung geht, beim 2. Durchgang wird die neue Anmeldung - warum auch immer - nicht akzeptiert
    $aTestString = _StringBetween($sPaket, '<div id="zks_loginf">', '</div>') ; schauen, was in der Zwischenablage liegt
    _ArrayDisplay($aTestString, 'Array Inhalt') ; hier will ich überprüfen, ob die Anmeldung erfolgreich war.

    Hier nochmals der Link, wo das ganze Script zu sehen ist:

    https://autoit.de/index.php?thread/86250-internetseite-auslesen-und-dann/&postID=693160#post693160

  • Vielleicht muss ich ja noch was mit Cookies machen? Oder beende ich die Sitzung nicht korrekt? Ich finde es halt komisch, das beim unten stehenden ConsoleWrite der Benutzername und das Passwort auch beim 2. Durchgang stimmt, jedoch ich ab 3a feststellen kann, das der Login so nicht funktioniert hat. Ich habe hier eher das Gefühl, das der Logoff Prozess nicht sauber läuft und beim 2. Durchgang noch irgendwas aktiv ist, was den erneuten Login mit neuen Daten verhindert.

    Das sollte keinen Unterschied machen da du das Connection-Handle sowie deinen Session-Handle schließt. Somit fliegen alle Cookies und Verbindungsinformationen raus.

    Du kannst trotzdem versuchen dich nach dem Login, wenn du mit allem fertig bist auszuloggen.

    Haben deine Benutzerdaten vielleicht Zeichen die du nicht richtig kodierst? Was passiert denn wenn du die Reihenfolge der Anmeldedaten vertauscht.

  • Haben deine Benutzerdaten vielleicht Zeichen die du nicht richtig kodierst? Was passiert denn wenn du die Reihenfolge der Anmeldedaten vertauscht.

    Das einzige Sonderzeichen im Passwort ist eine Raute '#'. Die kommt aber z.B. beim 1. Login vor, beim 2. z.B. nicht. Habe schon früher mal versucht, die Reihenfolge in der INI zu ändern. Keine Änderung.

    Ich habe mal die 14 erzeugten HTML Dateien beigefügt. Datei 1 bis 7 ist der erste Durchlauf, Datei 8 bis 14 ist der 2. Durchlauf. Vielleicht sehr Ihr ja was, was ich nicht sehe.

    Testabfragen.zip

  • alpines, ich glaube Deine Info von vorher geht doch in eine richtige Richtung. Problem werden die Benutzernamen sein (die aber vom System vorgegeben werden). Da sind nämlich '&' Zeichen drin ;(

    Code
    $sPOST ist: action=login&uname=FRITZ&MA659&password=GEHEIM&login=login

    Der Benutzernamen wird zwar richtig übergeben, aber für die action ist das ja dann

    Code
    &login=FRITZ
    &MA659
    &password=GEHEIM
    &login=login

    Leider sieht es im HTTP Header Live genauso aus. Glaubst Du, ich kann da mit '' arbeiten?

    Nachtrag: habe gerade beide Varianten versucht, also

    Code
    $sPOST ist: action=login&uname='FRITZ&MA659'&password='GEHEIM'&login=login
    $sPOST ist: action=login&uname="FRITZ&MA659"&password="GEHEIM"&login=login

    Hat beides nichts genützt.

    Ich glaube jetzt habe ich ganz schlechte Karten

    Einmal editiert, zuletzt von Code4Fun (27. Dezember 2018 um 15:42)

  • Von meinen 18 unterschiedlichen Benutzernamen, haben nur 5 KEIN "&" Zeichen. Wenn ich nur die 5 in die INI Datei nehme, kann ich mich am Stück anmelden. Ich muss irgendwie das "&" Zeichen kaskadieren, sonst sehe ich da irgendwie schwarz.

  • Schreibe statt des & mal %26

    Gruß Musashi

    Edit : Wieder mal war alpines etwas schneller ;(

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

  • Ja, ich denke das hat mich schon ein großes Stück nach vorne gebracht.

    Da ich ja & - Zeichen und # - Zeichen habe, habe ich die mal mit %26 und %23 kaskadiert. Jetzt läuft es schon viel weiter. Aber jetzt kommt die nächste Fehler suche :)

    Vielen Dank Euch allen

  • Schau mal, evtl. kannst du es gebrauchen... weiß nicht mehr, wo ich das her habe...

  • Schau mal, evtl. kannst du es gebrauchen... weiß nicht mehr, wo ich das her habe...

    Obwohl nicht 100% identisch vom Code (vom Ergebnis aber schon), müsste das von Prog@ndy sein, siehe :

    https://www.autoitscript.com/forum/topic/95850-url-encoding/

    Hier ein Beispiel mit beiden Varianten :

    Gruß Musashi

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

  • Obwohl nicht 100% identisch vom Code (vom Ergebnis aber schon), müsste das von Prog@ndy sein

    Hehe... bin mal wieder erstaunt, was du so alles findest... aber wenn es eine Version von Prog@ndy und eine andere gibt, dann ist die andere sicher nicht von ihm... zumal seine für mich "sauberer" wirkt. Da aber beide quasi identisch sind, ist das nicht wirklich wichtig. Ich habe die Funktionen bei mir aber trotzdem ausgetauscht und verwende nun die von Prog@ndy. ;)