Obsługa plików Cookie w Google Apps Script - jak wysłać pliki cookie w nagłówku?

Próbuję napisać prosty skrypt, który pobiera tekst ze strony internetowej i przetwarza ten ciąg znaków. Ale ta strona wymaga ode mnie zalogowania. Udało mi się zalogować na tę stronę. Tak się zalogowałem:

var payload = {"name1":"val1","name2":val2"};

var opt ={"payload":payload,"method":"post"};

var respose = UrlFetchApp.fetch("http://website.com/login",opt);

Po zalogowaniu strona umieszcza mnie w http://website.com/home. Sprawdziłem response.getContentText() i mogę potwierdzić, że jestem zalogowany pomyślnie, ponieważ zawiera tekst z http://website.com/home. Teraz muszę zdobyć zawartość http://website.com/page i ją przetworzyć. Najpierw założyłem, że skrypt poradzi sobie pliki cookie same w sobie i kontynuowane z

var pagedata = UrlFetchApp.fetch("http://website.com/page);//Did not work

To oczywiście nie zadziałało i pagedata.getContentText() każe mi się najpierw zalogować, co oznacza, że ciasteczka nie zostały pomyślnie przekazane..

Następnie próbowałem wyodrębnić pliki cookie, na które serwer odpowiedział podczas logowania i wysłać je wraz z tym żądaniem.

var cookie = response.getAllHeaders()['Set-Cookie'];     

// variable cookie now contains  a legitimate cookie.

// It contains 'JSESSIONID=blabla;Path=/' and 
// it is the ONLY cookie that server responds.

Próbowałem wysłać to ciasteczko w moim zapytaniu o stronę.

var header = {'Cookie':cookie};

var opt2 = {"header":header};

var pagedata = UrlFetchApp.fetch("http://website.com/page",opt2);

Myślę, że nawet teraz ciasteczka nie zostały poprawnie wysłane, ponieważ treść ponownie mówi mi, aby się zalogować.

AM i passing cookies poprawnie? Potrzebuję pomocy w zakresie prawidłowego sposobu wysyłania plików cookie w zapytaniu.

Author: Eric Koleda, 2012-06-03

3 answers

Tutaj znajdziesz specyfikację plików cookie: http://www.w3.org/Protocols/rfc2109/rfc2109

Masz potencjalny problem w kodzie: odpowiedź.getAllHeaders () ['Set-Cookie'] może zwrócić łańcuch lub tabelę łańcuchów, jeśli z serwera zostanie wysłanych wiele atrybutów 'set-cookie'.

Eric ma rację, nie możesz zwrócić ciastka bez trawienia go.

Drugi błąd w kodzie:

var opt2 = {"header":header};

Powinno być

var opt2 = {"headers":header};

Należy również pamiętać, że gaz wykorzystuje Google IPs. Może się zdarzyć, że dwa kolejne fetch używają różnych adresów IP. Serwer, z którym się łączysz, może być zależny od sesji IP.

Czy jesteś pewien, że serwer odsyła Ci tylko jedno ciasteczko po uwierzytelnieniu ?

 7
Author: Thierry Chevillard,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-06-06 10:43:24

Wygląda na to, że poprawnie ustawiasz nagłówki w UrlFetchApp.fetch ().

Uważam, że dane w nagłówku Set-Cookie są w innym formacie niż dane oczekiwane w nagłówku Cookie. Na przykład Set-Cookie zawiera informacje o wygaśnięciu itp.

 1
Author: Eric Koleda,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-06-04 16:50:33

Używałem google Script do pobierania i wysyłania plików cookie z mojego arkusza kalkulacyjnego google i myślę, że to nie działa. Pliki cookie różnią się w ciągu kilku minut.

Poniżej znajdziesz cztery pliki cookie za pomocą {[2] } z żądania skryptu arkusza kalkulacyjnego Google do tej samej witryny, tylko różne są minuty... Myślę, że jest możliwe, że korzysta z Google IPs i są różne w każdej chwili...

Ktoś wie jak to rozwiązać?

Kod to:

Cookie=response0.getAllHeaders()['Set-Cookie'];  

Ciasteczka:

B=12gp68lcnp5q4&b=3&s=sk; expires=Sun, 29-Jul-2018 14:10:12 GMT; path=/; domain=.***.com                    

B=7us258lcnp5sh&b=3&s=oc; expires=Sun, 29-Jul-2018 14:11:29 GMT; path=/; domain=.***.com                    

B=5nviv8tcnp5u5&b=3&s=qf; expires=Sun, 29-Jul-2018 14:12:22 GMT; path=/; domain=.***.com                    

B=c8eumg9cnp5vp&b=3&s=uj; expires=Sun, 29-Jul-2018 14:13:13 GMT; path=/; domain=.***.com                    
 0
Author: user8386412,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-29 15:42:21