Обработка файлов 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 в запросе.
Ответы
Ответ 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