Neues Thema starten

Einloggen und POST-Formular abschicken

Guten Tag,


kann sich Synesty einloggen und ein Formular per POST abschicken?
Evtl. mit APICall ?


Damit könnten wir uns ersparen jeden Tag manuell Daten bei einer Plattform hochladen zu müssen.

Die Plattform benutzt anscheinend auch Cookies und/oder ein Url-Token um festzustellen ob man eingeloggt ist.


Mit WGET oder CURL geht das soweit ich weiß.

Aber es wäre schön wenn das mit Synesty geht.


Vielen Dank!




Hallo,

ja das geht prinzipiell. Es ist zwar manchmal etwas tricky bis man es geschafft hat, aber wir einige Kunden machen das schon so.



Sie brauchen dazu 2 URLDownload Steps (APICall ginge auch, aber eher sinnvoll wenn auch gleichzeitig noch XML/JSON Verarbeitung gemacht werden soll)


URLDownload1 - schickt quasi das Login-Fomular ab. Dieser Step merkt sich automatisch Cookies, die beim Login gesetzt werden.URLDownload2 (oder APICall, oder SpreadsheetURLDownload) - Dieser Step ist jetzt quasi "eingeloggt" durch den Step vorher und kann jetzt auf geschützte Resourcen zugreifen. D.h. z.B. eine Datei herunterladen, die erst nach Login verfügbar ist. 


Herangehensweise (Beispiel): 

URLDownload1: method=POST, requestBody=username=foo&password=bar, headerContentType=application/x-www-form-urlencoded; charset=ISO-8859-1StepVorschau und mal den StepOutput prüfen, ob es so aussieht, wie wenn man eingeloggt ist.URLDownload1 - dort dann direkt die URL bzw. den request bauen, für die Datei, die man runterladen bzw. hochladen will.


Testen und Debugging

siehe Arbeit mit Tools wie requestbin (d.h. stellen sie das Feld host im URLDownload auf die Url von requestbin, um dann dort zu prüfen, welche Parameter genau ankommen. 


Was wenn es einfach nicht klappt?

Einige Seiten schützen sich gegen diese Vorgehensweise, in dem Sie noch einen zusätzlichen CSFT-Token erwarten. In diesem Fall ist es schwierig bis unmöglich. Evtl. kann man über noch einen weiteren vorangestellten URLDownload dieses Token aus der Seite herauslesen (parsen).  



1 Person gefällt dies

Sehr schön, vielen Dank!
Benötige ich zum Parsen des Tokens den HTMLParser aus den API CONNECTOR TOOLS?

Oder wie geht es wie Sie sagten mit URLDownload,
kann man da mit Regex arbeiten?

Einloggen funktioniert schonmal und im Response Header steht auch der Token:
location:https://www....?CFID=...&CFTOKEN=...&...


Den müsste ich nur noch für den nächsen POST extrahieren und verwenden.

Der POST-Request scheint aber komplizierter zu sein,

kann man das mit Synesty basteln?:


Im Request-Header steht u.a.:

Content-Type: multipart/form-data; boundary=---------------------------01234567891234


Und im Request-Body:


-----------------------------01234567891234

Content-Disposition: form-data; name="charset"

 

ISO-8859-1

-----------------------------01234567891234

Content-Disposition: form-data; name="maincsv"; filename="filexyz.csv"

Content-Type: application/vnd.ms-excel


An dieser Stelle kommt der ganze CSV-Text aus der Datei.


-----------------------------01234567891234

Content-Disposition: form-data; name="esync"

 

true

-----------------------------01234567891234

Content-Disposition: form-data; name="update"; filename=""

Content-Type: application/octet-stream

 

 

-----------------------------01234567891234

Content-Disposition: form-data; name="variants"; filename=""

Content-Type: application/octet-stream

 

 

-----------------------------01234567891234

Content-Disposition: form-data; name="deact"

 

true

-----------------------------01234567891234

Content-Disposition: form-data; name="dactiv"

 

true

-----------------------------01234567891234

Content-Disposition: form-data; name="temail"

 

abc@xyz.de

-----------------------------01234567891234

Content-Disposition: form-data; name="submitsave"

 

Speichern und Abarbeitung der Jobs starten

-----------------------------01234567891234--



Token extrahieren

Ein weg wäre, dass Sie z.B. nach dem ersten URLDownload noch einen TextHTMLWriter Step packen. 

Damit greifen Sie auf den Output des URLDownloads "responseHeaders" zu.

Über die Freemarker Built-ins für Strings könnten Sie dann versuchen diesen Token zu extrahieren. Da gibt es verschiedene Ansätze von substring in Verbindung mit index_of oder über matches wenn es RegEx sein soll. 


Der Output des TextHTMLWriters ist dann der Token, auf den Sie wieder im nächsten Step zugreifen können (über den + - Button)


FileUpload

Ja das sieht komplizierter aus. Theoretisch sollte sich jeder beliebige RequestBody basteln lassen... am Ende ist es alles Text.

Den Dateiupload sollte man über URLDownload.fileToUpload realisieren können. 

Wie es aussieht muss man noch weitere Formular-Felder übermitteln (deact=true dactiv=false etc.)

Dazu sollten bei den xxxContentType Felder "application/x-www-form-urlencoded; charset=ISO-8859-1" eingestellt werden. 

Im Requestbody sollten dann die Formular-Felder so angegeben werden: feld1=foo&feld2=bar


Ein Screenshot des HTML-Codes des Formulars könnte hier helfen (sie können ja versuchen sensitive Stellen zu anonymisieren, falls Sie das hier nicht schreiben wollen)


um es weiter zu testen könnten Sie mit Hilfe von Firebug auch das HTML-Formular ihres Anbieters auf requestbin umbiegen und mal den Request dort hin schicken. Dann mit Synesty das gleiche machen, bis die Requests gleich aussehen. 


Es gibt leider keine einfache Antwort auf Ihre Anforderung. Allein die Tatsache des cftokens scheint zu zeigen, dass ihr Anbieter es einem sehr schwer machen will, das zu tun, was sie vorhaben ;)



1 Person gefällt dies
Anmelden um einen Kommentar zu veröffentlichen