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.
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 ?
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.
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
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