2012-06-03 10 views
13

Próbuję napisać prosty skrypt, który pobiera tekst ze strony i przetwarza ten ciąg. Ale ta strona wymaga zalogowania się. Udało mi się zalogować na tę stronę. To jak ja zalogowany:Obsługa plików cookie w Google Apps Script - jak wysyłać pliki cookie w nagłówku?

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

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

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

Po zalogowaniu się na stronie internetowej umieszcza mnie w http://website.com/home. Sprawdziłem response.getContentText() i mogę potwierdzić, że jestem zalogowany, ponieważ zawiera on tekst z http://website.com/home. Teraz potrzebuję uzyskać zawartość http://website.com/page i przetworzyć to. raz pierwszy przyjęto skrypt może obsługiwać pliki cookie przez siebie i przystąpił

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

To oczywiście nie działał i pagedata.getContentText() mówi, żebym się najpierw zalogować, co wskazuje cookies nie zostały pomyślnie przeszedł ..

Potem próbował wyodrębnij pliki cookie, na które serwer odpowiedział podczas logowania, i wyślij je razem 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ć ten plik cookie na żądanie mojej strony.

var header = {'Cookie':cookie}; 

var opt2 = {"header":header}; 

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

Myślę, że nawet teraz pliki cookie nie zostały poprawnie wysłane, ponieważ treść ponownie mówi, żebym się logował.

Czy poprawnie przekazuję pliki cookie? Potrzebuję pomocy w zakresie prawidłowej metody wysyłania plików cookie w żądaniu.

Odpowiedz

7

Tutaj można znaleźć specyfikację ciasteczek: http://www.w3.org/Protocols/rfc2109/rfc2109

masz potencjalnego problemu w kodzie: response.getAllHeaders() [ 'Set-Cookie "] może zwrócić ciąg znaków lub tabelę ciągów znaków, jeśli wiele atrybutów" set-cookie "zostanie odesłanych z serwera.

Eric ma rację, nie możesz zwrócić ciasteczka bez jego strawienia.

Drugi błąd w kodzie:

var opt2 = {"header":header}; 

powinny być

var opt2 = {"headers":header}; 

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

Czy jesteś pewien, że serwer odsyła Ci tylko jeden plik cookie po uwierzytelnieniu?

+0

Dzięki za wskazanie !. Tak, jestem pewien, że serwer wysyła tylko jedno ciasteczko uwierzytelniające. Spróbuję i zgłoś się z '' nagłówkami "' – AKarthik10

+0

EDIT: Próbowałem go z '" nagłówkami "' i to działało. Mogę potwierdzić, że działa. Zrobiłem plik PHP, który zapisuje wszystkie nagłówki, z którymi został zażądany. Poprosiłem o to za pomocą UrlFetchApp i mogłem zobaczyć w moim dzienniku wszystkie niestandardowe nagłówki wysłane z UrlFetchApp. Więc gdzie popełniłem błąd był "" nagłówek "' i musi to być '" nagłówek "'. Dziękuję Ci! – AKarthik10

1

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

Uważam, że dane w nagłówku Set-Cookie mają inny format niż dane oczekiwane w nagłówku Cookie. Na przykład, Set-Cookie zawiera informacje na temat wygaśnięcia itp

+0

I zostały zweryfikowane, że jest 'Set-Cookie: JSESSIONID = A04 ~ 1E321E3265CB36814498F30B8D134667.w804; Ścieżka =/'. Próbowałem przekazać cały plik cookie (w tym 'Path = /') i wysyłać tylko plik cookie 'JSESS..' (przy użyciu polecenia split with; as delimiter). Oba zawiodły. – AKarthik10

0

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

Poniżej znajdziecie cztery ciasteczka korzystając UrlFetchApp.fetch() od żądania skryptu arkusza kalkulacyjnego Google na tym samym miejscu, tylko różne są minut ... myślę, że to jest możliwe, że używa Google i adresy IP są różne za każdym razem ...

Ktoś wie, jak to rozwiązać?

Kod jest:

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

Cookies:

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

Jeśli masz nowe pytanie, poproś o to, klikając przycisk [Zadaj pytanie] (https://stackoverflow.com/questions/ask). Dodaj link do tego pytania, jeśli pomoże to w zapewnieniu kontekstu. - [Z recenzji] (/ opinia/niskiej jakości-posts/16870036) –

Powiązane problemy