Подтвердить что ты не робот

Обработка файлов cookie в Google Apps Script - Как отправлять файлы cookie в заголовке?

Я пытаюсь написать простой script, который извлекает текст с веб-страницы и обрабатывает эту строку. Но для этого веб-сайта мне необходимо войти в систему. Мне удалось войти на этот сайт. Вот как я вошел в систему:

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

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

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

После входа в систему сайт помещает меня в http://website.com/home. Я проверил response.getContentText(), и я могу подтвердить, что я был успешно зарегистрирован, так как он содержит текст из http://website.com/home. Теперь мне нужно получить содержимое http://website.com/page и обработать его. Сначала я предположил, что script может обрабатывать файлы cookie сам по себе и приступил к работе

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

Это явно не сработало, и pagedata.getContentText() говорит мне сначала войти в систему, что указывает, что файлы cookie не были успешно переданы.

Затем я попытался извлечь файлы cookie, которые сервер ответил во время входа в систему, и отправить его вместе с этим запросом.

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.

Я попытался отправить этот файл cookie в мой запрос на страницу.

var header = {'Cookie':cookie};

var opt2 = {"header":header};

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

Я думаю, что даже сейчас cookie не отправляется должным образом, так как контент снова говорит мне, что я должен войти в систему.

Я передаю файлы cookie правильно? Мне нужна помощь относительно правильного метода отправки файлов cookie в запросе.

4b9b3361

Ответ 1

Здесь вы можете найти настройки cookie: http://www.w3.org/Protocols/rfc2109/rfc2109

У вас есть потенциальная проблема в вашем коде: response.getAllHeaders() ['Set-Cookie'] может возвращать либо строку, либо таблицу строки, если несколько атрибутов set-cookie отправляются с сервера.

Эрик прав, вы не можете вернуть cookie, не переваривая его.

Вторая ошибка в вашем коде:

var opt2 = {"header":header};

должен быть

var opt2 = {"headers":header};

Помните также, что GAS использует IP-адреса Google. Может случиться так, что две последовательные выборки используют разные IP-адреса. Сервер, к которому вы подключаетесь, может быть зависимым от сеанса IP.

Вы уверены, что сервер отправит вам только один файл cookie после аутентификации?

Ответ 2

Похоже, вы правильно устанавливаете заголовки в UrlFetchApp.fetch().

Я считаю, что данные в заголовке Set-Cookie находятся в другом формате, чем данные, которые ожидаются в заголовке Cookie. Например, Set-Cookie содержит информацию об истечении срока действия и т.д.

Ответ 3

Я использовал google Script для получения и отправки файлов cookie из моей электронной таблицы google, и я думаю, что это не работает. В течение нескольких минут файлы cookie различаются.

Ниже вы найдете четыре файла cookie с помощью UrlFetchApp.fetch() из электронной таблицы Google Script на один и тот же сайт, только разные - это минуты... Я думаю, что возможно использование IP-адресов Google и в любое другое время...

Кто-то знает, как это решить?

Код:

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

Печенье:

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