Und wie bekommen wir hin, dass er den richtigen Header schickt? ![]()
WINHTTP - Telefonanlage weist ab (Zugriff verweigert), IE.au3 geht aber
-
- [ offen ]
-
AutoITier -
2. August 2012 um 11:25 -
Geschlossen -
Erledigt
-
-
Indem du uns den relevanten Ausschnitt aus deinem Code zeigst. Das ist nie im Leben der selbe wie der den ich geschrieben habe. Schließlich wird als User-Agent der Standardmäßige AutoIt String angegeben. Du arbeitest also allem Anschein nach mit einem Code von dem wir keine Ahnung haben. Wie sollen wir dir jetzt helfen? Ich kann leider nicht hellsehen.
-
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).
-
Versuchs mal damit:
Spoiler anzeigen
[autoit]#include <WinHTTP.au3>
[/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")
If @error Then Exit MsgBox(16, "Error", "Unable to establish connection")$hRequest = _WinHttpOpenRequest($hConnect, "POST", "login_json", Default, "http://192.168.4.8/")
[/autoit] [autoit][/autoit] [autoit]
_WinHttpSendRequest($hRequest, Default, "LOGIN_NOW=true&LOGIN_NAME=XX&LOGIN_PASS=XXX")_WinHttpReceiveResponse($hRequest)
[/autoit] [autoit][/autoit] [autoit]
If Not _WinHttpQueryDataAvailable($hRequest) Then Exit MsgBox(16, "Error", "No data in request")$sHeader = _WinHttpQueryHeaders($hRequest)
[/autoit] [autoit][/autoit] [autoit]
ConsoleWrite($sHeader & @CRLF & @CRLF)$sContent = ""
[/autoit] [autoit][/autoit] [autoit]
While Sleep(20)
$sContent &= _WinHttpReadData($hRequest)
If @error Then ExitLoop
WEnd
ConsoleWrite($sContent & @CRLF & @CRLF)
_WinHttpCloseHandle($hRequest)$aCookies = StringRegExp($sHeader, "Set-Cookie: (.+)", 3)
[/autoit] [autoit][/autoit] [autoit]
If @error Then Exit MsgBox(16, "Error", "No cookies found.")
$sCookieString = ""
For $i = 0 To UBound($aCookies) -1
$sCookieString &= $aCookies[$i]
If $i < UBound($aCookies) -1 Then $sCookieString &= "; "
Next
ConsoleWrite("Cookie: " & $sCookieString & @CRLF & @CRLF)$hRequest = _WinHttpOpenRequest($hConnect, "GET", "configs_state", Default, "http://192.168.4.8/")
[/autoit] [autoit][/autoit] [autoit]
_WinHttpSendRequest($hRequest, "Cookie: " & $sCookieString)$sHeader = _WinHttpQueryHeaders($hRequest)
[/autoit] [autoit][/autoit] [autoit]
ConsoleWrite($sHeader & @CRLF & @CRLF)$sContent = ""
[/autoit] [autoit][/autoit] [autoit]
While Sleep(20)
$sContent &= _WinHttpReadData($hRequest)
If @error Then ExitLoop
WEnd
ConsoleWrite($sContent & @CRLF & @CRLF)
_WinHTTPCloseHandle($hRequest)_WinHTTPCloseHandle($hConnect)
[/autoit]
_WinHTTPCloseHandle($hOpen)
Falls es nicht funktioniert, dann poste bitte die Konsolenausgabe und eventuelle Fehlermeldungen. -
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.761Das 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 ?!
-
Sieht für mich nach einem Problem mit meinem regulären Ausdruck aus...
Versuchs so nochmal:Spoiler anzeigen
[autoit]#include <WinHTTP.au3>
[/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")
If @error Then Exit MsgBox(16, "Error", "Unable to establish connection")$hRequest = _WinHttpOpenRequest($hConnect, "POST", "login_json", Default, "http://192.168.4.8/")
[/autoit] [autoit][/autoit] [autoit]
_WinHttpSendRequest($hRequest, Default, "LOGIN_NOW=true&LOGIN_NAME=XX&LOGIN_PASS=XXX")_WinHttpReceiveResponse($hRequest)
[/autoit] [autoit][/autoit] [autoit]
If Not _WinHttpQueryDataAvailable($hRequest) Then Exit MsgBox(16, "Error", "No data in request")$sHeader = _WinHttpQueryHeaders($hRequest)
[/autoit] [autoit][/autoit] [autoit]
ConsoleWrite($sHeader & @CRLF & @CRLF)$sContent = ""
[/autoit] [autoit][/autoit] [autoit]
While Sleep(20)
$sContent &= _WinHttpReadData($hRequest)
If @error Then ExitLoop
WEnd
ConsoleWrite($sContent & @CRLF & @CRLF)
_WinHttpCloseHandle($hRequest)$aCookies = StringRegExp($sHeader, "Set-Cookie: (\V+)\s*", 3)
[/autoit] [autoit][/autoit] [autoit]
If @error Then Exit MsgBox(16, "Error", "No cookies found.")
$sCookieString = ""
For $i = 0 To UBound($aCookies) -1
$sCookieString &= $aCookies[$i]
If $i < UBound($aCookies) -1 Then $sCookieString &= "; "
Next
ConsoleWrite("Cookie: " & $sCookieString & @CRLF & @CRLF)$hRequest = _WinHttpOpenRequest($hConnect, "GET", "configs_state", Default, "http://192.168.4.8/")
[/autoit] [autoit][/autoit] [autoit]
_WinHttpSendRequest($hRequest, "Cookie: " & $sCookieString)$sHeader = _WinHttpQueryHeaders($hRequest)
[/autoit] [autoit][/autoit] [autoit]
ConsoleWrite($sHeader & @CRLF & @CRLF)$sContent = ""
[/autoit] [autoit][/autoit] [autoit]
While Sleep(20)
$sContent &= _WinHttpReadData($hRequest)
If @error Then ExitLoop
WEnd
ConsoleWrite($sContent & @CRLF & @CRLF)
_WinHTTPCloseHandle($hRequest)_WinHTTPCloseHandle($hConnect)
[/autoit]
_WinHTTPCloseHandle($hOpen)
("Set-Cookie: (.+)" ersetzt durch "Set-Cookie: (\V+)\s*", da der Zeilenumbruch nicht vollständig entfernt wird) -
Ich glaube, es ist sinnvoller, das via IE.au3 zu realisieren .. was meinst Du?
Dort klappt's ja wunderbar, auch wenn der Ansatz ein anderer ist. -
Ich gaube das nicht, aber das könnte daran liegen, dass ich IE nicht mag ;). Außerdem hatte ich den IE zeitweise komplett deaktiviert.
Funktioniert es denn jetzt? -