Hallo zusammen,
ich habe mir jetzt alle HTTPMOD Threads durchgelesen und alles probiert aber komme irgendwie nicht so richtig weiter.
Ich möchte gerne auf einen Shop (Siemens BSH) zugreifen und über das Modul eine Art "Preisüberwachung" von Kaffeemaschinen realisieren.
Folgenden Ablauf brauche ich dafür:
- GET auf die Login Seite und hier aus dem Body den CSRF-Token rausziehen
- POST mit Username, Passwort und CSRF Token auf eine andere URL
- GET der eigentlichen "Ziel-Shopseite" und aus dem Body weitere Readings auswerten
- POST mit CSRF auf eine Logout URL
Ich habe das Ganze mit BURP mitgeschnitten und auf der Basis unten stehendes Device erstellt.
Es funktioniert allerdings nur, wenn ich zweimal hintereinander ein Update/Reread durchführe und ich gehe aktuell davon aus, dass es am CSRF-Token liegt der erst nach dem Auth-Versuch ins Reading geschrieben wird.
Internals:
BUSY 0
CHANGED
DEF https://shop.siemens-home.bsh-group.com/de/productlistde/coffeemachines/fullyautomaticcoffeemachines/eq6 10800
FUUID 5ccadfb6-f33f-38a0-babc-a9e57928da6d1c23
Interval 10800
LASTSEND 1556983749.69072
LastAuthTry 2019-05-04 17:29:07
MainURL https://shop.siemens-home.bsh-group.com/de/productlistde/coffeemachines/fullyautomaticcoffeemachines/eq6
ModuleVersion 3.5.9 - 13.2.2019
NAME SiemensCoffeeShop
NOTIFYDEV global
NR 727
NTFY_ORDER 50-SiemensCoffeeShop
ReplacementEnabled 1
STATE ???
TRIGGERTIME 1556991582.51508
TRIGGERTIME_FMT 2019-05-04 19:39:42
TYPE HTTPMOD
addr https://shop.siemens-home.bsh-group.com:443
auth 0
buf
code 200
compress 1
conn
data
displayurl https://shop.siemens-home.bsh-group.com/de/productlistde/coffeemachines/fullyautomaticcoffeemachines/eq6
header Cookie: SECURE_GUID=4711; STORE_SESSION_ID=4711
host shop.siemens-home.bsh-group.com
httpheader HTTP/1.0 200 OK
X-Frame-Options: SAMEORIGIN
Content-Type: text/html;charset=UTF-8
Content-Language: de-DE
Content-Encoding: gzip
X-XSS-Protection: 1; mode=block
X-Content-Type-Options: nosniff
Cache-Control: max-age=0, private, no-store, no-cache, must-revalidate
Content-Security-Policy-Report-Only: default-src https: data: wss: 'unsafe-inline' 'unsafe-eval'; report-uri https://xl86pc2ky3.execute-api.eu-central-1.amazonaws.com/prod/icorecspupload
Content-Length: 15466
Strict-Transport-Security: max-age=31536000
Date: Sat, 04 May 2019 15:29:10 GMT
Connection: close
Vary: Accept-Encoding
Set-Cookie: STORE_SESSION_ID=4711; Domain=shop.siemens-home.bsh-group.com; Path=/de/; Secure; HttpOnly
httpversion 1.0
hu_blocking 0
hu_filecount 34
hu_port 443
hu_portSfx
ignoreredirects 0
loglevel 4
path /de/productlistde/coffeemachines/fullyautomaticcoffeemachines/eq6
protocol https
redirects 0
timeout 2
url https://shop.siemens-home.bsh-group.com/de/productlistde/coffeemachines/fullyautomaticcoffeemachines/eq6
value 0
HTTPCookieHash:
SECURE_GUID;:
Name SECURE_GUID
Options Domain=shop.siemens-home.bsh-group.com; Path=/de/; Secure; HttpOnly
Path
Value 4711
STORE_SESSION_ID;:
Name STORE_SESSION_ID
Options Domain=shop.siemens-home.bsh-group.com; Path=/de/; Secure; HttpOnly
Path
Value 4711
QUEUE:
READINGS:
2019-05-04 17:29:10 Price-1 xxx.xx
2019-05-04 17:29:10 Price-2 xxx.xx
2019-05-04 17:29:10 Price-3 xxx.xx
2019-05-04 17:29:10 Price-4 xxx.xx
2019-05-04 17:29:10 Price-5 xxx.xx
2019-05-04 17:29:10 Price-6 xxx.xx
2019-05-04 17:29:10 SKU-1 TE653501DE
2019-05-04 17:29:10 SKU-2 TE657M03DE
2019-05-04 17:29:10 SKU-3 TE657509DE
2019-05-04 17:29:10 SKU-4 TE651509DE
2019-05-04 17:29:10 SKU-5 TE658509DE
2019-05-04 17:29:10 SKU-6 TE655503DE
2019-05-04 17:29:10 Title-1 EQ.6 plus s300
2019-05-04 17:29:10 Title-2 EQ.6 plus s700
2019-05-04 17:29:10 Title-3 EQ.6 plus s700
2019-05-04 17:29:10 Title-4 EQ.6 plus s100
2019-05-04 17:29:10 Title-5 EQ.6 plus s800
2019-05-04 17:29:10 Title-6 EQ.6 plus s500
2019-05-04 17:29:10 _csrf 4711
REQUEST:
data
header
ignoreredirects 0
retryCount 1
type update
url https://shop.siemens-home.bsh-group.com/de/productlistde/coffeemachines/fullyautomaticcoffeemachines/eq6
value 0
defptr:
readingBase:
Price-1 reading
Price-2 reading
Price-3 reading
Price-4 reading
Price-5 reading
Price-6 reading
SKU-1 reading
SKU-2 reading
SKU-3 reading
SKU-4 reading
SKU-5 reading
SKU-6 reading
Title-1 reading
Title-2 reading
Title-3 reading
Title-4 reading
Title-5 reading
Title-6 reading
_csrf reading
readingNum:
Price-1 02
Price-2 02
Price-3 02
Price-4 02
Price-5 02
Price-6 02
SKU-1 03
SKU-2 03
SKU-3 03
SKU-4 03
SKU-5 03
SKU-6 03
Title-1 04
Title-2 04
Title-3 04
Title-4 04
Title-5 04
Title-6 04
_csrf 01
readingOutdated:
readingSubNum:
Price-1 -1
Price-2 -2
Price-3 -3
Price-4 -4
Price-5 -5
Price-6 -6
SKU-1 -1
SKU-2 -2
SKU-3 -3
SKU-4 -4
SKU-5 -5
SKU-6 -6
Title-1 -1
Title-2 -2
Title-3 -3
Title-4 -4
Title-5 -5
Title-6 -6
requestReadings:
update:
Price-1 reading 02-1
Price-2 reading 02-2
Price-3 reading 02-3
Price-4 reading 02-4
Price-5 reading 02-5
Price-6 reading 02-6
SKU-1 reading 03-1
SKU-2 reading 03-2
SKU-3 reading 03-3
SKU-4 reading 03-4
SKU-5 reading 03-5
SKU-6 reading 03-6
Title-1 reading 04-1
Title-2 reading 04-2
Title-3 reading 04-3
Title-4 reading 04-4
Title-5 reading 04-5
Title-6 reading 04-6
_csrf reading 01
sslargs:
Attributes:
authRetries 1
disable 0
enableControlSet 1
enableCookies 1
event-on-change-reading .*
handleRedirects 0
reAuthRegex id="bshLoginData"|Unauthorized
reading01Name _csrf
reading01Regex <meta name="_csrf" content="(.*)"/>
reading02Name Price
reading02RegOpt g
reading02Regex "sku":".*?".*?"title":".*?".*?"price":{"value":(.*?),
reading03Name SKU
reading03RegOpt g
reading03Regex "sku":"(.*?)".*?"title":".*?".*?"price":{"value":.*?,
reading04Name Title
reading04RegOpt g
reading04Regex "sku":".*?".*?"title":"(.*?)".*?"price":{"value":.*?,
replacement1Mode reading
replacement1Regex %%_csrf%%
replacement1Value _csrf
room Technik
showBody 0
sid01Data loginUrl=%2Fde%2Fsys%2Flogin&errorPageUrl=https%3A%2F%2Fshop.siemens-home.bsh-group.com%2Fde%2Ferror&successPageUrl=https%3A%2F%2Fshop.siemens-home.bsh-group.com%2Fde%2Fproductlistde%2Fcoffeemachines%2Ffullyautomaticcoffeemachines%2Feq6&username=mail@hier.de&password=Password&_csrf=%%_csrf%%
sid01URL https://shop.siemens-home.bsh-group.com/de/sys/login
userattr get01Name reading01Name reading01Regex reading02JSON reading02Name reading02RegOpt reading02Regex reading03Name reading03RegOpt reading03Regex reading04Name reading04RegOpt reading04Regex replacement1Mode:reading,internal,text,expression,key replacement1Regex replacement1Value sid01Data sid01URL sid02URL
verbose 5
Danke schonmal für eure Mühen!
Gruß
Dann mach einfach ein zusätzliches get:
get1Name Reread2
get1URL https://shop.siemens-home.bsh-group.com/de/productlistde/coffeemachines/fullyautomaticcoffeemachines/eq6
get1Poll 1
[/s]
Alternativ: zusätzlich im Login Prozess:
sid00URL https://shop.siemens-home.bsh-group.com/de/sys/login
sid00IdRegex <meta name="_csrf" content="(.*)"/>
Dann hast Du den csrf Token in $sid und kannst direkt schreiben:
sid01Data loginUrl=%2Fde%2Fsys%2Flogin&errorPageUrl=https%3A%2F%2Fshop.siemens-home.bsh-group.com%2Fde%2Ferror&successPageUrl=https%3A%2F%2Fshop.siemens-home.bsh-group.com%2Fde%2Fproductlistde%2Fcoffeemachines%2Ffullyautomaticcoffeemachines%2Feq6&username=mail@hier.de&password=Password&_csrf=$sid
Ist sauberer (aber nicht getestet ;) )
Ich habe deinen Alternativweg gerade direkt mal getestet und klappt excellent, danke!
Was ich jetzt noch offen habe:
Ich würde gerne nach dem Evaluieren der Ganzen readingxyRegex auch den Logout vornehmen.
Hierzu wird nur ein POST mit "_csrf=4711" an /de/sys/logout abgesetzt.
Wie kann ich das machen, ich denke ein sid02Data wäre falsch, da dies ja vor dem eigentlich Get im Falle eines ReAuth ausgeführt wird, richtig?
Was mir einfallen würde, ich weiß aber nicht ob es der saubere Weg ist:
sid02Url https://shop.siemens-home.bsh-group.com/de/productlistde/coffeemachines/fullyautomaticcoffeemachines/eq6
sid02ParseResponse1
sid03Url https://shop.siemens-home.bsh-group.com/de/sys/logout
sid03Data _csrf=$sid
Ja, mit sid02 und sid03 könnte es funktionieren. Dann musst Du aber die HauptURL im DEF löschen (bzw auf none setzen), sonst wird er immer versuchen, nach der Authentifizierung, die Seite aufzurufen... und wird es natürlich nicht schaffen, da Du abgemeldet bist => er wird wieder eine Authentifizierung anfordern.
EDIT: vielleicht wird dann auch reAuthAlways nötig, weil Du keine Seite mehr liest, und deswegen kein "Unauthorized" mehr kriegen würdest
Danke, habe es so eingebaut und mit nem Verbose-Logging überprüft, dass er nur das macht was ich möchte => passt.
Dann zusätzlich für die 2 POSTs noch das "IgnoreRedirects" Attribut gesetzt und dann geht es ganz reibungslos vonstatten.
Attributes:
authRetries 1
disable 0
enableControlSet 1
enableCookies 1
event-on-change-reading .*
handleRedirects 0
reAuthAlways 1
reAuthRegex id="bshLoginData"|Unauthorized
reading01Name _csrf
reading01Regex <meta name="_csrf" content="(.*)"/>
reading02Name Price
reading02RegOpt g
reading02Regex "sku":".*?".*?"title":".*?".*?"price":{"value":(.*?),
reading03Name SKU
reading03RegOpt g
reading03Regex "sku":"(.*?)".*?"title":".*?".*?"price":{"value":.*?,
reading04Name Title
reading04RegOpt g
reading04Regex "sku":".*?".*?"title":"(.*?)".*?"price":{"value":.*?,
room Technik
showBody 0
sid00IdRegex <meta name="_csrf" content="(.*)"/>
sid00URL https://shop.siemens-home.bsh-group.com/de/mysiemens/staffsales/login
sid01Data loginUrl=%2Fde%2Fsys%2Flogin&errorPageUrl=https%3A%2F%2Fshop.siemens-home.bsh-group.com%2Fde%2Ferror&successPageUrl=https%3A%2F%2Fshop.siemens-home.bsh-group.com%2Fde%2Fproductlistde%2Fcoffeemachines%2Ffullyautomaticcoffeemachines%2Feq6&username=mail@hier.de&password=Password&_csrf=$sid
sid01IgnoreRedirects 1
sid01URL https://shop.siemens-home.bsh-group.com/de/sys/login
sid02ParseResponse 1
sid02URL https://shop.siemens-home.bsh-group.com/de/productlistde/coffeemachines/fullyautomaticcoffeemachines/eq6
sid03Data _csrf=$sid
sid03IgnoreRedirects 1
sid03URL https://shop.siemens-home.bsh-group.com/de/sys/logout
userattr get01Name reading01Name reading01Regex reading02JSON reading02Name reading02RegOpt reading02Regex reading03Name reading03RegOpt reading03Regex reading04Name reading04RegOpt reading04Regex replacement1Mode:reading,internal,text,expression,key replacement1Regex replacement1Value sid00IdRegex sid00URL sid01Data sid01IgnoreRedirects:0,1 sid01URL sid02ParseResponse:0,1 sid02URL sid03Data sid03IgnoreRedirects:0,1 sid03URL
verbose 5