Beiträge von AutoITier
-
-
Herzlichen Dank (!).
PHP
Alles anzeigenHTTP/1.1 200 OK Server: GoAhead-Webs Expires: 0 Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 Pragma: no-cache Content-Type: text/html; charset=iso-8859-1; Set-Cookie: AUERSessionID=MPWMYWEQHEAPICT Set-Cookie: AUERWEB_COOKIE=XX {"login":1,"dongleState":0,"dongleError":0} Cookie: AUERSessionID=MPWMYWEQHEAPICT ; AUERWEB_COOKIE=XX +>20:32:59 AutoIT3.exe ended.rc:0 >Exit code: 0 Time: 2.761
Das ist die Ausgabe. Ich habe "configs_state" mal' gegen "appclose" getauscht, denn "appclose" schließt die Sitzung wieder - aber eben nur, wenn er sie zuordnen kann. Das Ergebnis: melde ich mich auf der Weboberfläche an, teilt er mir nach Skriptausführung mit, dass der User noch angemeldet ist - sprich: Abmeldevorgang klappt nicht, d.h. Cookie wird scheinbar nicht übergeben ?!
-
Sorry, habe eben schon mehrere Varianten getestet.
Das hier ist ja Deine (+ unten die Messagebox bzw. "configs_state"):
[autoit]#include <winhttp.au3>
[/autoit][autoit][/autoit][autoit][/autoit][autoit]$hOpen = _WinHttpOpen("Mozilla/5.0 (Windows NT 5.1; rv:10.0.2) Gecko/20100101 Firefox/10.0.2")
[/autoit][autoit][/autoit][autoit]
$hConnect = _WinHttpConnect($hOpen, "192.168.4.8")$sResponse = _WinHttpSimpleRequest($hConnect, "POST", "login_json", "http://192.168.4.8/", "LOGIN_NOW=true&LOGIN_NAME=XX&LOGIN_PASS=XXX")
[/autoit][autoit][/autoit][autoit]$aCookies = StringRegExp($sResponse, "Set-Cookie: (.+)", 3)
[/autoit][autoit][/autoit][autoit]
$sCookieString = ""
For $i = 0 To UBound($aCookies) -1
$sCookieString &= $aCookies[$i]
If $i < UBound($aCookies) -1 Then $sCookieString &= "; "
Next$sResponse = _WinHttpSimpleRequest($hConnect, "GET", "configs_state", "http://192.168.4.8/", Default, "Cookie: " & $sCookieString)
[/autoit][autoit][/autoit][autoit]msgbox(0,0,$sResponse)
[/autoit]Er gibt mir nach wie vor "Forbidden" aus - und in Wireshark sehe ich, dass keine Cookies für "configs_state" übergeben werden (obwohl er dort auf diese wartet, zur Authentifizierung).
-
-
Ich weiß, ist auch nicht meine Art. Im Anhang mal' ein Foto, auf dem oben die Daten angezeigt werden, welche bei Aufruf von /configs_state im Browser (= funktioniert) nach Anmeldung generiert werden und unten die, wenn ich es via AutoIt (WINHTTP) erledige (funktioniert nicht, trotz "Anmeldung").
Kann es am "Cookie" bzw. "Set-Cookie" liegen?
-
-
Habe den Anmeldevorgang mitprotokolliert und hier abgelegt:
http://pastebin.com/ji9xUBYgEin Cookie scheint sichtbar zu sein.
-
Vielen Dank für die Mühe, weiß ich sehr zu schätzen!
Der Hersteller schreibt:
"Allgemeines / Anmeldung am System
Login, Digest Access Authentication (DAA)
Bevor ein Befehl im ITK-System aufgerufen werden kann, ist ein Login zwingend erforderlich. Einzige Ausnahme stellt das Abfragen der Systeminformationen dar.
Eine Autorisierung an der COMmander-6000-Serie erfolgt über Digest Access Authentication (DAA) nach RFC 2617. Dabei läuft die Session-Wiedererkennung abseits der normal üblichen Digest-Implementierung. Sie erfolgt mittels eines Cookies AUERSessionID (15 Zeichen langer Wert) vom Webserver des ITK-Systems, im ersten erfolgreichen Login. Wird dieses Cookie von der Anwendung nicht übertragen, so fordert der Konfigurationsserver bei jedem Aufruf eine erneute Autorisierung mittels Digest Access Authentication. Hierbei ist zu beachten, dass dann eine weitere Session angelegt wird. Aktuell unterstützt die COMmander-6000-Serie maximal 100 Sessions. Bei einer Überschreitung dieses Wertes werden die ältesten Teilnehmer-Sessions im Webserver des ITK-Systems gelöscht."Spricht das dafür, dass es klappt?
-
-
-
-
Hallo zusammen,
mit der IE.au3 kann ich wunderbar auf meine Telefonanlage connecten, beispielsweise so (Auszug):
[autoit]Local $IE = _IECreate('http://192.168.4.8/login_json?LOGIN_NOW=&LOGIN_NAME=Name&LOGIN_PASS=Kennwort', 0,1)
[/autoit]
Local $ConfigState = _IENavigate($IE, 'http://192.168.4.8/teilnehmer_profil_modus_state?tnId=4209&pageindex=102').
Wichtig ist nur, dass man am Ende wieder mit "http://192.168.4.8/appclose" den Logout durchführt, weil der User ansonsten für X Minuten gesperrt ist. Das klappt alles wunderbar, u.a. auch, weil das Cookie immer weitergereicht wird.
Ich versuchte das nun mit WINHTTP nachzustellen. Login klappt auch einwandfrei, doch bei der Folgeseite zeigt er mir immer, dass der Zugriff verweigert wurde - sprich: die TK-Anlage kann den Login nicht auf die Folgeseite beziehen.
[autoit]$handle = _WinHttpOpen("Mozilla/5.0 (Windows NT 5.1; rv:10.0.2) Gecko/20100101 Firefox/10.0.2")
[/autoit]
$connect = _WinHttpConnect($handle, "192.168.4.8")
$qCode = _WinHttpSimpleRequest($connect, "POST", "login_json", "192.168.4.8", "LOGIN_NOW=true&LOGIN_NAME=USERNAME&LOGIN_PASS=Kennwort")
FileWrite("Eingeloggt.html", $qCode)Woran mag das liegen? Ich habe nun bereits so viel über WINHTTP gelesen und konnte die Fehlerursache nicht finden.
Was meint ihr?
Danke !
-
Ich habe das Problem nun mit Autoit, aber ohne "Klicks" gelöst, indem ich den Traffic zwischen IE und Anlage abgehört und die Befehle somit nachgestellt habe.
-
Wem fällt hierzu etwas ein? Können wir die Javascript-Bedienung vornehmen?
-
Vielen Dank. Was wäre denn beispielsweise so ein Befehl (vgl. mein Quelltext oben)?
-
Darf ich das Thema noch einmal hochholen? Welche Varianten gäbe es noch, die Webseite zu steuern?
-
Hallo zusammen,
ich wollte die Problemstellung gerne noch einmal hier aufgreifen. Es besteht tatsächlich "nur" die Möglichkeit, die Anlage via Webinterface zu steuern.
Wie gehen wir mit dem JavaSkript-Problem um? Selbst wenn "Push the Button" funktionieren würde - lässt sich diese Variante unsichtbar im Hintergrund umsetzen?
Vielen Dank !
F1109 -
Das nachfolgende Skript funktioniert soweit, ABER dann nicht, wenn zwei eMails das gleiche Datum und die gleiche Uhrzeit haben (z.B. Scharf- und Unscharfschaltung kurz hintereinander = kommt zur gleichen Zeit an).
Wie könnten wir eine For-Schleife erstellen, die ein Array füllt und zwar so: Pro eMail eine Zeile / für Datum, Uhrzeit und Ereignis jeweils eine Spalte ? Ich denke, dass das für viele von Euch easy ist - ich komme da noch nicht ganz nach.
[autoit]#Include <File.au3>
[/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit][autoit]
#Include <Array.au3>
#include <String.au3>$aFilelist = _FileListToArray("\\server\david\Archive\GROUP\7\", "*.001")
[/autoit][autoit][/autoit][autoit][/autoit][autoit]
Dim $aFiledate[$aFilelist[0]+1]
For $i = 1 To $aFilelist[0]
$aFiledate[$i] = FileGetTime("\\server\david\Archive\GROUP\7\" & '\' & $aFilelist[$i], 1, 1)
Next$neuesteDatei = $aFilelist[_ArrayMaxIndex($aFiledate, 1)]
[/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit][autoit]
$file = "\\server\david\Archive\GROUP\7\"&$neuesteDatei
$Datum1 = _StringBetween(FileReadLine($file, 3), "am ", " um", -1)
$Uhrzeit1 = _StringBetween(FileReadLine($file, 3), "um ", " Uhr", -1)
$Ereignis1 = _StringBetween(FileReadLine($file, 5), "Ereignis ", " eingetreten", -1)
_ArrayDelete($aFiledate,$neuesteDatei)
$neuesteDatei = $aFilelist[_ArrayMaxIndex($aFiledate, 1)]
$file = "\\server\david\Archive\GROUP\7\"&$neuesteDatei$Datum2 = _StringBetween(FileReadLine($file, 3), "am ", " um", -1)
[/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit][autoit]
$Uhrzeit2 = _StringBetween(FileReadLine($file, 3), "um ", " Uhr", -1)
$Ereignis2 = _StringBetween(FileReadLine($file, 5), "Ereignis ", " eingetreten", -1)
_ArrayDelete($aFiledate,$neuesteDatei)
$neuesteDatei = $aFilelist[_ArrayMaxIndex($aFiledate, 1)]
$file = "\\server\david\Archive\GROUP\7\"&$neuesteDatei$Datum3 = _StringBetween(FileReadLine($file, 3), "am ", " um", -1)
[/autoit][autoit][/autoit][autoit]
$Uhrzeit3 = _StringBetween(FileReadLine($file, 3), "um ", " Uhr", -1)
$Ereignis3 = _StringBetween(FileReadLine($file, 5), "Ereignis ", " eingetreten", -1)_ArrayDelete($aFiledate,$neuesteDatei)
[/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit][autoit]
$neuesteDatei = $aFilelist[_ArrayMaxIndex($aFiledate, 1)]
$file = "\\server\david\Archive\GROUP\7\"&$neuesteDatei$Datum4 = _StringBetween(FileReadLine($file, 3), "am ", " um", -1)
[/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit][autoit]
$Uhrzeit4 = _StringBetween(FileReadLine($file, 3), "um ", " Uhr", -1)
$Ereignis4 = _StringBetween(FileReadLine($file, 5), "Ereignis ", " eingetreten", -1)Dim $Test2[5][3] = [ [$Datum1[0], $Uhrzeit1[0], $Ereignis1[0]], [$Datum2[0], $Uhrzeit2[0], $Ereignis2[0]], [$Datum3[0], $Uhrzeit3[0], $Ereignis3[0]] ]
[/autoit][autoit][/autoit][autoit]_ArrayDisplay($Test2,"Übersicht")
[/autoit] -
Wie bekomme ich die drei String-Between in ein Array?
Also jeweils eine Spalte. Darunter würde ich jeweils mit _ArrayDelete die letzte Zeile löschen und das ganze 4 x.
#Include <File.au3>
#Include <Array.au3>
#include <String.au3>
[autoit]$aFilelist = _FileListToArray("\\server\david\Archive\GROUP\7\", "*.001")
[/autoit][autoit][/autoit][autoit][/autoit][autoit]
Dim $aFiledate[$aFilelist[0]+1]
For $i = 1 To $aFilelist[0]
$aFiledate[$i] = FileGetTime("\\server\david\Archive\GROUP\7\" & '\' & $aFilelist[$i], 0, 1)
Next$neuesteDatei = $aFilelist[_ArrayMaxIndex($aFiledate, 1)]
[/autoit][autoit][/autoit][autoit]
$file = "\\server\david\Archive\GROUP\7\"&$neuesteDateiDim $result[4][3]
[/autoit][autoit][/autoit][autoit]_StringBetween(FileReadLine($file, 3), "am ", " um", -1)
[/autoit][autoit][/autoit][autoit][/autoit][autoit]
_StringBetween(FileReadLine($file, 3), "um ", " Uhr", -1)
_StringBetween(FileReadLine($file, 5), "Ereignis ", " eingetreten", -1)_ArrayDisplay($result, "Test")
[/autoit] -
Nettes Skript, danke. Ich stehe gerade davor, dass ich nicht weiß, wie ich am besten die vier letzten Dateien einlese, also die vier neuesten.
[autoit]#include <String.au3>
[/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit][autoit]
#include <array.au3>
#include <file.au3>$aFilelist = _FileListToArray("\\server\david\Archive\GROUP\7\", "*.001")
[/autoit][autoit][/autoit][autoit]
Dim $aFiledate[$aFilelist[0]+1]
For $i = 1 To $aFilelist[0]
$aFiledate[$i] = FileGetTime("\\server\david\Archive\GROUP\7\" & '\' & $aFilelist[$i], 0, 1)
NextMsgBox(0, 'Test', 'Die aktuellste Datei ist: ' & $aFilelist[_ArrayMaxIndex($aFiledate, 1)])
[/autoit][autoit][/autoit][autoit][/autoit][autoit]$neuesteDatei = $aFilelist[_ArrayMaxIndex($aFiledate, 1)]
[/autoit][autoit][/autoit][autoit]$file = "\\server\david\Archive\GROUP\7\\"&$neuesteDatei
[/autoit][autoit][/autoit][autoit]$output = FileReadLine($file, 5)
[/autoit][autoit][/autoit][autoit]
$aResult = _StringBetween($output, "Ereignis ", " eingetreten", -1)msgbox(0,"",$aResult[0])
[/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit]Denn: es kommt auf die Uhrzeit an, die in der eMail steht - die ausgelesene ist ja "nur" die Zeit der eMail-Ankunft. Das kann mal' abweichen.