Stimmt! Danke für den Hinweis. Manchmal ist die Leitung doch recht dick, auf der man steht.
Internetseite auslesen und dann?
-
Code4Fun -
13. Dezember 2018 um 14:18 -
Erledigt
-
-
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 :
Code
Alles anzeigen; #FUNCTION# ;=============================================================================== ; Name...........: _WinHttpSetTimeouts ; Description ...: Sets time-outs involved with HTTP transactions. ; Syntax.........: _WinHttpSetTimeouts($hInternet [, $iResolveTimeout = Default [, $iConnectTimeout = Default [, $iSendTimeout = Default [, $iReceiveTimeout = Default ]]]]) ; Parameters ....: $hInternet - Handle returned by _WinHttpOpen() or _WinHttpOpenRequest(). ; $iResolveTimeout - [optional] Time-out value, in milliseconds, to use for name resolution. Default is 0 ms. ; $iConnectTimeout - [optional] Time-out value, in milliseconds, to use for server connection requests. Default is 60000 ms. ; $iSendTimeout - [optional] Time-out value, in milliseconds, to use for sending requests. Default is 30000 ms. ; $iReceiveTimeout - [optional] Time-out value, in milliseconds, to receive a response to a request. Default is 30000 ms. ; Return values .: Success - Returns 1. ; Failure - Returns 0 and sets @error: ; |1 - DllCall failed ; Author ........: trancexx ; Modified.......: ; Remarks .......: Initial values are: ; |- $iResolveTimeout = 0 ; |- $iConnectTimeout = 60000 ; |- $iSendTimeout = 30000 ; |- $iReceiveTimeout = 30000 ; Related .......: _WinHttpReceiveResponse ; Link ..........: http://msdn.microsoft.com/en-us/library/aa384116(VS.85).aspx ; Example .......:
Gruß Musashi
-
Probier es mal mit _WinHttpSetOption und WINHTTP_OPTION_CONNECT_TIMEOUT, WINHTTP_OPTION_RECEIVE_RESPONSE_TIMEOUT oder WINHTTP_OPTION_RECEIVE_TIMEOUT. https://docs.microsoft.com/de-de/windows/…tp/option-flags
-
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
C
Alles anzeigen#Region ;**** Directives created by AutoIt3Wrapper_GUI **** #AutoIt3Wrapper_Res_Language=1031 #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI **** #Region ; Includes #include <Array.au3> #include <ButtonConstants.au3> #include <GUIConstantsEx.au3> #include <String.au3> #include <WinHttp.au3> #EndRegion ; Includes #Region ; Script Kopf #cs ---------------------------------------------------------------------------- AutoIt Version: 3.3.14.5 Author: Code4Fun Script Function: GUI Script zum Auslesen unserer Postfächer, zur Ermittlung der aktiven Teilnehmer Erstellungendatum: vom 14.12.2018 bis Änderungsdatum: Version: 0.0.1 History: 0.0.1: Initialerstellung 0.0.2: #ce ---------------------------------------------------------------------------- #EndRegion ; Script Kopf #Region ; Vorgehensweise ; 1. Login auf ZKS in einem Postfach, dann den Quelltext anzeigen lassen ; 2. Alles markieren und kopieren, damit sich der Text in der Zwischenablage befindet ; 3. Script laufen lassen. Im Scriptverzeichnis wird eine TXT Datei erstellt, welche als Namen die behördliche Nummern enthält. ; 4. Liste irgendwie noch nach Excel bringen (spätere Priorität) #EndRegion ; Vorgehensweise #Region ; Globale Variablen Deklaration Opt("MustDeclareVars", 1) ; Variablen müssen deklariert sein Opt("GUICloseOnESC", 1) ; GUI schließt mit ESC Global $guiButton, $guiInput1, $guiInput2, $ReadCombo, $ReadInput, $ZKSFile, $msg, $sFileVersion Global $iCount = 1, $sBenutzerName, $sPasswort #EndRegion ; Globale Variablen Deklaration #Region ; Versionnummer If @Compiled Then $sFileVersion = FileGetVersion(@AutoItExe) Else $sFileVersion = " !!! Testlauf" EndIf #EndRegion ; Versionnummer #Region ; GUI wird gestartet GUI() #EndRegion ; GUI wird gestartet #Region ; While Schleife While 1 $msg = GUIGetMsg() Switch $msg Case $GUI_EVENT_CLOSE GUIDelete() Exit Case $guiButton LESE_INI() EndSwitch WEnd #EndRegion ; While Schleife #Region ; Funktionen Func GUI() ; GUI erstellen GUICreate("ZKS Postfach Teilnehmer Parser " & $sFileVersion, 400, 80) $guiButton = GUICtrlCreateButton("Zwischenablage parsen", 110, 20, 200, 40, BitOR($GUI_SS_DEFAULT_BUTTON, $BS_DEFPUSHBUTTON)) GUISetState(@SW_SHOW) EndFunc ;==>GUI Func LESE_INI() ; INI Datei im Scriptverzeichnis auslesen, um den Benutzernamen und das Passwort zu ermitteln Local $aINI, $iZeilenZaehler, $iSpaltenZaehler, $iLCount = 0 ; Variable für Array deklarieren $aINI = IniReadSection(@ScriptDir & "\ZKS-Teilnehmer.ini", "Zugangsdaten") ; Sektion einlesen If Not IsArray($aINI) Then ; Wenn zurückgegebene Variable kein Array ist MsgBox(0, '', 'INI-Sektion konnte nicht gelesen werden') Exit EndIf ;~ _ArrayDisplay($aINI, 'Inhalt INI-Sektion: [Zugangsdaten]') ; eingelesenes Array anzeigen For $iZeilenZaehler = 1 To UBound($aINI) - 1 ; $iZeilenZaehler ist der Zaehler für die Zeilen ;~ ConsoleWrite($aINI[$iZeilenZaehler][0] & " = "); Benutzername $sBenutzerName = ($aINI[$iZeilenZaehler][0]) For $iSpaltenZaehler = 1 To UBound($aINI, 2) - 1 ; $iSpaltenZaehler ist der Zaehler für die Spalten ;~ ConsoleWrite($aINI[$iZeilenZaehler][$iSpaltenZaehler] & @CRLF); Passwort $sPasswort = ($aINI[$iZeilenZaehler][$iSpaltenZaehler]) ;~ ConsoleWrite("Benutername ist: " & $sBenutzerName & " mit dem Passwort: " & $sPasswort & @CRLF) $iLCount += 1 ConsoleWrite("Runde " & $iLCount & " hat begonnen => ") ZKS_Abfragen() Next Next EndFunc ;==>LESE_INI Func ZKS_Abfragen() Local $sServerName, $sPaket, $sPOST, $hConnect, $hSession, $aTestString $hSession = _WinHttpOpen('Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:64.0) Gecko/20100101 Firefox/64.0') ;host $sServerName = 'leanv.zks-abfall.de' $hConnect = _WinHttpConnect($hSession, $sServerName) _WinHttpSetTimeouts($hConnect, 2000, 45000, 45000, 45000) ;(1)Aufruf der Seite: https://leanv.zks-abfall.de/LaenderEANV_Web/registrierung?BTN-initRegistration=start (GET) $sPaket = _WinHttpSimpleSSLRequest($hConnect, 'GET', '/LaenderEANV_Web/registrierung?BTN-initRegistration=start') _FileWrite($sPaket) ; schreibe eine Kontroll HTML Datei ;(2)rechts oben auf Anmelden klicken (GET) $sPaket = _WinHttpSimpleSSLRequest($hConnect, 'GET', '/LaenderEANV_Web/registrierung?action=displaylogin', 'https://leanv.zks-abfall.de/LaenderEANV_Web/registrierung?BTN-initRegistration=start') _FileWrite($sPaket) ; schreibe eine Kontroll HTML Datei ;(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. ;(4)Unter Menü Registrierung/Stammdatenpflege auf Registrierung/Stammdaten klicken (GET) $sPaket = _WinHttpSimpleSSLRequest($hConnect, 'GET', 'LaenderEANV_Web/registrierung?BTN-initRegistration=start', 'https://leanv.zks-abfall.de/LaenderEANV_Web/registrierung') _FileWrite($sPaket) ; schreibe eine Kontroll HTML Datei ;(5)Auf die große blaue Schaltfläche Registrierung/Stammdatenpflege klicken (POST) $sPOST = 'BTN-auswahl=Registrierung / Stammdatenpflege' $sPaket = _WinHttpSimpleSSLRequest($hConnect, 'POST', '/LaenderEANV_Web/stammdaten', 'https://leanv.zks-abfall.de/LaenderEANV_Web/registrierung?BTN-initRegistration=start', $sPOST) _FileWrite($sPaket) ; schreibe eine Kontroll HTML Datei ;(6)Auf den Radio Button Baden-Württemberg klicken $sPOST = 'chooseBL=H&ok=Übernehmen' $sPaket = _WinHttpSimpleSSLRequest($hConnect, 'POST', 'LaenderEANV_Web/stammdaten?action=auswahl', 'https://leanv.zks-abfall.de/LaenderEANV_Web/stammdaten', $sPOST) _FileWrite($sPaket) ; schreibe eine Kontroll HTML Datei ClipPut("") ; Zwischenablage zur Vorsicht einmal leeren ClipPut($sPaket) ; Zwischenablage mit Quellcode befüllen ;(7)rechts oben auf Abmelden klicken (GET) $sPaket = _WinHttpSimpleSSLRequest($hConnect, 'GET', '/LaenderEANV_Web/registrierung?action=logout', 'https://leanv.zks-abfall.de/LaenderEANV_Web/stammdaten?BTN-main=Stammdaten') _FileWrite($sPaket) ; schreibe eine Kontroll HTML Datei _WinHttpCloseHandle($hConnect) ; die Handles werden beendet _WinHttpCloseHandle($hSession) ; die Handles werden beendet PARSEN_Dokumentenname() ; mit der befüllten Zwischenablage wird an die Funktion PARSEN_Dokumentenname() übergeben. EndFunc ;==>ZKS_Abfragen Func PARSEN_Dokumentenname() ; hier ermittle ich den Provider Namen und erstelle daraus ein Textdatei mit dessen Namen. Local $str, $line1, $line2 $str = ClipGet() ; Zwischenablage abfragen $line1 = _StringBetween($str, '<div class="zks_form_wrapper">', '<!-- Buttons -->') ; Erste Vorauswahl If StringInStr($line1[0], "Provider") Then $line2 = _StringBetween($line1[0], '<p class="zks_reg_details_content"><b>', ' / Provider</b>') ; den Postfachnamen rausbekommen falls mit Provider endet EndIf If StringInStr($line1[0], "Sonstiges") Then $line2 = _StringBetween($line1[0], '<p class="zks_reg_details_content"><b>', ' / Sonstiges</b>') ; den Postfachnamen rausbekommen falls mit Sonstiges endet EndIf If FileExists(@ScriptDir & "\" & $line2[0] & ".txt") Then ; überprüfen, ob die Datei schon besteht, wenn ja, dann löschen und Variable füllen FileDelete(@ScriptDir & "\" & $line2[0] & ".txt") Sleep(2000) $ZKSFile = @ScriptDir & "\" & $line2[0] & ".txt" Else $ZKSFile = @ScriptDir & "\" & $line2[0] & ".txt" ; wenn nein, dann nur Variable füllen EndIf FileWrite(@ScriptDir & "\" & $line2[0] & ".txt", "") ; die eigentliche leere Text Datei erstellen PARSEN_Inhalt() ; nachdem der Dateiname gefunden und erstellt wurde, geht es um den eigentlichen Inhalt. Weiter mit der Funktion PARSEN_Inhalt() EndFunc ;==>PARSEN_Dokumentenname Func PARSEN_Inhalt() ; hier ermittle ich die verschiedenen Nummern und Rollen Local $str, $line1, $line2, $line3, $sString $str = ClipGet() ; Zwischenablage erneut abfragen, da Variable local definiert wurde $line1 = _StringBetween($str, '<!-- <hr class="zks_separator" />-->', '</table>') ; Erste Vorauswahl $line2 = _StringBetween($line1[0], '<!-- Ruler -->', '<!-- Buttons -->') ; Zweite Vorauswahl ;~ For $i = 0 To UBound($line2) - 1 Step 3 ; Step 3 dachte ich war gut, aber es hat das Ergebnis verfälscht. Ohne ist alles OK For $i = 0 To UBound($line2) - 1 ; Abfrage der einzelnen Blöcke aus $line2 $line3 = _StringBetween($line2[$i], '<p class="zks_reg_details_content">', @TAB & @TAB & @TAB & '<br />') ; Richtigen String ausfindig machen ; gefundene Strings durch Abkürzung ersetzen Select Case StringInStr($line3[0], 'Bevollmächtigter des Erzeugers') ; wenn dieser String gefunden wurde $sString = StringReplace($line3[0], 'Bevollmächtigter des Erzeugers', 'BEV') ; ersetze ihn mit diese String | speziell hier gibt es noch Probleme, aber auf später verschoben. Prio 2 Case StringInStr($line3[0], "Erzeuger") ; wenn dieser String gefunden wurde $sString = StringReplace($line3[0], "Erzeuger", "ERZ") ; ersetze ihn mit diese String Case StringInStr($line3[0], "Beförderer") ; wenn dieser String gefunden wurde $sString = StringReplace($line3[0], "Beförderer", "BEF") ; ersetze ihn mit diese String Case StringInStr($line3[0], "Entsorger") ; wenn dieser String gefunden wurde $sString = StringReplace($line3[0], "Entsorger", "ENT") ; ersetze ihn mit diese String Case StringInStr($line3[0], "Makler") ; wenn dieser String gefunden wurde $sString = StringReplace($line3[0], "Makler", "MAK") ; ersetze ihn mit diese String Case StringInStr($line3[0], "kurzfr.Lag./Umschlag") ; wenn dieser String gefunden wurde $sString = StringReplace($line3[0], "kurzfr.Lag./Umschlag", "ZWL") ; ersetze ihn mit diese String ;~ Case Else ;~ MsgBox(48, "Keine Ersetzung gefunden", "In der Select Case Anweisung wurde kein String zum Ersetzen gefunden") EndSelect ;~ ConsoleWrite($sString) ; Ausgabe des Ergebnis in unteres Output Fenster - zur Kontrolle FileWrite($ZKSFile, $sString) ; Ausgabe in meine Text Datei Next EndFunc ;==>PARSEN_Inhalt Func _FileWrite($sHTML, $Zusatz = "") ; erstellt zu Kontrollzwecken lokale HTML Dateien, ConsoleWrite($iCount & "Vote" & $Zusatz & @CRLF) FileDelete($iCount & "Vote" & $Zusatz & ".html") FileWrite($iCount & "Vote" & $Zusatz & ".html", $sHTML) $iCount += 1 EndFunc ;==>_FileWrite #EndRegion ; Funktionen
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.
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.
Code
Alles anzeigenFunc LESE_INI() ; INI Datei im Scriptverzeichnis auslesen, um den Benutzernamen und das Passwort zu ermitteln Local $aINI, $iZeilenZaehler, $iSpaltenZaehler; Variable für Array deklarieren $aINI = IniReadSection(@ScriptDir & "\ZKS-Teilnehmer.ini", "Zugangsdaten") ; Sektion einlesen If Not IsArray($aINI) Then ; Wenn zurückgegebene Variable kein Array ist MsgBox(0, '', 'INI-Sektion konnte nicht gelesen werden') Exit EndIf 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]) ConsoleWrite("Benutername ist: " & $sBenutzerName & " mit dem Passwort: " & $sPasswort & @CRLF) Next Next EndFunc ;==>LESE_INI
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
Code
Alles anzeigenhttps://leanv.zks-abfall.de/LaenderEANV_Web/registrierung Host: leanv.zks-abfall.de User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:64.0) Gecko/20100101 Firefox/64.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: de,en-US;q=0.7,en;q=0.3 Accept-Encoding: gzip, deflate, br Referer: https://leanv.zks-abfall.de/LaenderEANV_Web/registrierung?action=displaylogin Content-Type: application/x-www-form-urlencoded Content-Length: 145 DNT: 1 Connection: keep-alive Cookie: JSESSIONID=2C1F37D779DAB450F5A0CF7EE6F18757.zksa005pn2; zks_fontsize=77 Upgrade-Insecure-Requests: 1 action=login&uname=BENUTZERNAME&password=PASSWORD&callingUri=/LaenderEANV_Web/registrierung?BTN-initRegistration=start&login=login POST: HTTP/1.1 200 200 Date: Thu, 27 Dec 2018 08:10:20 GMT Server: Apache/2.4.6 (Red Hat Enterprise Linux) mod_jk/1.2.46 OpenSSL/1.0.2k-fips Strict-Transport-Security: max-age=63072000; includeSubdomains; preload X-XSS-Protection: 1; mode=block X-Content-Type-Options: nosniff Content-Type: text/html;charset=UTF-8 Via: 1.1 leanv.zks-abfall.de Connection: close Transfer-Encoding: chunked --------------------- https://leanv.zks-abfall.de/LaenderEANV_Web/registrierung?BTN-initRegistration=start Host: leanv.zks-abfall.de User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:64.0) Gecko/20100101 Firefox/64.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: de,en-US;q=0.7,en;q=0.3 Accept-Encoding: gzip, deflate, br Referer: https://leanv.zks-abfall.de/LaenderEANV_Web/registrierung DNT: 1 Connection: keep-alive Cookie: JSESSIONID=2C1F37D779DAB450F5A0CF7EE6F18757.zksa005pn2; zks_fontsize=77 Upgrade-Insecure-Requests: 1 GET: HTTP/1.1 200 200 Date: Thu, 27 Dec 2018 08:10:27 GMT Server: Apache/2.4.6 (Red Hat Enterprise Linux) mod_jk/1.2.46 OpenSSL/1.0.2k-fips Strict-Transport-Security: max-age=63072000; includeSubdomains; preload X-XSS-Protection: 1; mode=block X-Content-Type-Options: nosniff Content-Type: text/html;charset=UTF-8 Via: 1.1 leanv.zks-abfall.de Connection: close Transfer-Encoding: chunked --------------------- https://leanv.zks-abfall.de/LaenderEANV_Web/stammdaten Host: leanv.zks-abfall.de User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:64.0) Gecko/20100101 Firefox/64.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: de,en-US;q=0.7,en;q=0.3 Accept-Encoding: gzip, deflate, br Referer: https://leanv.zks-abfall.de/LaenderEANV_Web/registrierung?BTN-initRegistration=start Content-Type: application/x-www-form-urlencoded Content-Length: 52 DNT: 1 Connection: keep-alive Cookie: JSESSIONID=2C1F37D779DAB450F5A0CF7EE6F18757.zksa005pn2; zks_fontsize=77 Upgrade-Insecure-Requests: 1 BTN-auswahl=Registrierung / Stammdatenpflege POST: HTTP/1.1 200 200 Date: Thu, 27 Dec 2018 08:10:29 GMT Server: Apache/2.4.6 (Red Hat Enterprise Linux) mod_jk/1.2.46 OpenSSL/1.0.2k-fips Strict-Transport-Security: max-age=63072000; includeSubdomains; preload X-XSS-Protection: 1; mode=block X-Content-Type-Options: nosniff Content-Type: text/html;charset=UTF-8 Via: 1.1 leanv.zks-abfall.de Connection: close Transfer-Encoding: chunked --------------------- https://leanv.zks-abfall.de/LaenderEANV_Web/stammdaten?action=auswahl Host: leanv.zks-abfall.de User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:64.0) Gecko/20100101 Firefox/64.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: de,en-US;q=0.7,en;q=0.3 Accept-Encoding: gzip, deflate, br Referer: https://leanv.zks-abfall.de/LaenderEANV_Web/stammdaten Content-Type: application/x-www-form-urlencoded Content-Length: 29 DNT: 1 Connection: keep-alive Cookie: JSESSIONID=2C1F37D779DAB450F5A0CF7EE6F18757.zksa005pn2; zks_fontsize=77 Upgrade-Insecure-Requests: 1 chooseBL=H&ok=Übernehmen POST: HTTP/1.1 302 302 Date: Thu, 27 Dec 2018 08:10:33 GMT Server: Apache/2.4.6 (Red Hat Enterprise Linux) mod_jk/1.2.46 OpenSSL/1.0.2k-fips Strict-Transport-Security: max-age=63072000; includeSubdomains; preload X-XSS-Protection: 1; mode=block X-Content-Type-Options: nosniff Location: /LaenderEANV_Web/stammdaten?BTN-main=Stammdaten Content-Length: 0 Content-Type: text/html;charset=utf-8 Via: 1.1 leanv.zks-abfall.de Connection: close --------------------- https://leanv.zks-abfall.de/LaenderEANV_Web/stammdaten?BTN-main=Stammdaten Host: leanv.zks-abfall.de User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:64.0) Gecko/20100101 Firefox/64.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: de,en-US;q=0.7,en;q=0.3 Accept-Encoding: gzip, deflate, br Referer: https://leanv.zks-abfall.de/LaenderEANV_Web/stammdaten DNT: 1 Connection: keep-alive Cookie: JSESSIONID=2C1F37D779DAB450F5A0CF7EE6F18757.zksa005pn2; zks_fontsize=77 Upgrade-Insecure-Requests: 1 POST: HTTP/1.1 200 200 Date: Thu, 27 Dec 2018 08:10:33 GMT Server: Apache/2.4.6 (Red Hat Enterprise Linux) mod_jk/1.2.46 OpenSSL/1.0.2k-fips Strict-Transport-Security: max-age=63072000; includeSubdomains; preload X-XSS-Protection: 1; mode=block X-Content-Type-Options: nosniff Content-Type: text/html;charset=UTF-8 Via: 1.1 leanv.zks-abfall.de Connection: close Transfer-Encoding: chunked --------------------- https://leanv.zks-abfall.de/LaenderEANV_Web/registrierung?action=logout Host: leanv.zks-abfall.de User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:64.0) Gecko/20100101 Firefox/64.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: de,en-US;q=0.7,en;q=0.3 Accept-Encoding: gzip, deflate, br Referer: https://leanv.zks-abfall.de/LaenderEANV_Web/stammdaten?BTN-main=Stammdaten DNT: 1 Connection: keep-alive Cookie: JSESSIONID=2C1F37D779DAB450F5A0CF7EE6F18757.zksa005pn2; zks_fontsize=77 Upgrade-Insecure-Requests: 1 GET: HTTP/1.1 200 200 Date: Thu, 27 Dec 2018 08:10:39 GMT Server: Apache/2.4.6 (Red Hat Enterprise Linux) mod_jk/1.2.46 OpenSSL/1.0.2k-fips Strict-Transport-Security: max-age=63072000; includeSubdomains; preload X-XSS-Protection: 1; mode=block X-Content-Type-Options: nosniff Content-Type: text/html;charset=UTF-8 Set-Cookie: JSESSIONID=D6BE7E25E8C4F44583D3940FC60327D7.zksa005pn2; Path=/LaenderEANV_Web; HttpOnly Via: 1.1 leanv.zks-abfall.de Connection: close Transfer-Encoding: chunked ---------------------
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.
-
Hmm, also wenn die Website sagt, dass die Daten falsch sind, dann werden sie wohl auch falsch sein, tritt denn der exakt selbe Fehler auf wenn du die ersten beiden Accounts vertauscht?
Also der vorherige 2. funktioniert aber der 1. funktioniert nicht mehr?
-
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
Der Benutzernamen wird zwar richtig übergeben, aber für die action ist das ja dann
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
-
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.
-
Die Zeichen müssen URL-encoded werden, also statt einem & nimmst du %26. Hier mal eine Seite wo du das ganze testen kannst: https://www.urlencoder.org/
Es gibt auch ein RFC welches das ganze mehr oder weniger spezifiziert aber ich denke wenn du die gängigsten dort nimmst passt das schon.
Außerdem sind die encodeden Werte ihre Ascii-Hexwertte. Siehe: http://hki.uni-koeln.de/archive/hki201…ASCII-Table.jpg
-
-
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...
Code: EncodeUrl() + DecodeUrl()
Alles anzeigenFunc EncodeUrl($src) Local $iCount = 1, $iStrLen = StringLen($src), $ch, $NewChr, $buff While ($iCount <= $iStrLen) ;Get byte code from string $ch = Asc(StringMid($src, $iCount, 1)) ;Look for what bytes we have Switch $ch ;Looks ok here Case 45, 46, 48 To 57, 65 To 90, 95, 97 To 122, 126 $buff &= Chr($ch) Case 32 ;Space found $buff &= "+" Case Else ;Convert $ch to hexidecimal $buff &= "%" & Hex($ch, 2) EndSwitch ;INC Counter $iCount += 1 WEnd Return $buff EndFunc ;==>EncodeUrl Func DecodeUrl($src) Local $iCount = 1, $iStrLen = StringLen($src), $ch, $buff While ($iCount <= $iStrLen) $ch = StringMid($src, $iCount, 1) ;Correct spaces If ($ch = "+") Then $ch = " " ;Decode any hex values If ($ch = "%") Then $ch = Chr(Dec(StringMid($src, $iCount + 1, 2))) $iCount += 2 EndIf ;Build buffer $buff &= $ch ;Inc Counter $iCount += 1 WEnd Return $buff EndFunc ;==>DecodeUrl
-
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 :
Code
Alles anzeigenGlobal $sURLString = '123abc=!@#$%^&*()_+ ' ConsoleWrite('! --------- URL Handling -----------------------------------------' & @CRLF) ConsoleWrite('> Originalstring : ' & $sURLString & @CRLF) ConsoleWrite('+ Prog@ndy _URIEncode : ' & _URIEncode($sURLString) & @CRLF) ConsoleWrite('+ Bitnugger EncodeUrl : ' & EncodeUrl($sURLString) & @CRLF & @CRLF) ConsoleWrite('+ Prog@ndy _URIDecode : ' & _URIDecode(_URIEncode($sURLString)) & @CRLF) ConsoleWrite('+ Bitnugger DecodeUrl : ' & DecodeUrl(EncodeUrl($sURLString)) & @CRLF) ConsoleWrite('! ----------------------------------------------------------------' & @CRLF & @CRLF) ; --------------------------------------------------------------- ; ------------------------ Variante Prog@ndy -------------------- ; --------------------------------------------------------------- Func _URIEncode($sData) Local $aData = StringSplit(BinaryToString(StringToBinary($sData,4),1),"") Local $nChar $sData="" For $i = 1 To $aData[0] ; ConsoleWrite($aData[$i] & @CRLF) $nChar = Asc($aData[$i]) Switch $nChar Case 45, 46, 48 To 57, 65 To 90, 95, 97 To 122, 126 $sData &= $aData[$i] Case 32 $sData &= "+" Case Else $sData &= "%" & Hex($nChar,2) EndSwitch Next Return $sData EndFunc Func _URIDecode($sData) Local $aData = StringSplit(StringReplace($sData,"+"," ",0,1),"%") $sData = "" For $i = 2 To $aData[0] $aData[1] &= Chr(Dec(StringLeft($aData[$i],2))) & StringTrimLeft($aData[$i],2) Next Return BinaryToString(StringToBinary($aData[1],1),4) EndFunc ; --------------------------------------------------------------- ; ------------------------ Variante Bitnugger ------------------- ; --------------------------------------------------------------- Func EncodeUrl($src) Local $iCount = 1, $iStrLen = StringLen($src), $ch, $NewChr, $buff While ($iCount <= $iStrLen) ;Get byte code from string $ch = Asc(StringMid($src, $iCount, 1)) ;Look for what bytes we have Switch $ch ;Looks ok here Case 45, 46, 48 To 57, 65 To 90, 95, 97 To 122, 126 $buff &= Chr($ch) Case 32 ;Space found $buff &= "+" Case Else ;Convert $ch to hexidecimal $buff &= "%" & Hex($ch, 2) EndSwitch ;INC Counter $iCount += 1 WEnd Return $buff EndFunc ;==>EncodeUrl Func DecodeUrl($src) Local $iCount = 1, $iStrLen = StringLen($src), $ch, $buff While ($iCount <= $iStrLen) $ch = StringMid($src, $iCount, 1) ;Correct spaces If ($ch = "+") Then $ch = " " ;Decode any hex values If ($ch = "%") Then $ch = Chr(Dec(StringMid($src, $iCount + 1, 2))) $iCount += 2 EndIf ;Build buffer $buff &= $ch ;Inc Counter $iCount += 1 WEnd Return $buff EndFunc ;==>DecodeUrl
Gruß Musashi
-
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.
-