Вопрос по http – Обработка файлов cookie в скрипте Google Apps - Как отправить файлы cookie в заголовок?
Я пытаюсь написать простой скрипт, который извлекает текст с веб-страницы и обрабатывает эту строку. Но этот сайт требует, чтобы я вошел в систему. Мне удалось войти на этот сайт. Вот как я вошел в систему:
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
.
Now I need to get the contents of http://website.com/page
и обработать это.
Сначала я предположил, что скрипт может обрабатывать файлы cookie самостоятельно, и приступил к
var pagedata = UrlFetchApp.fetch("http://website.com/page);//Did not work
Это явно не сработало иpagedata.getContentText()
сначала говорит мне войти, что означает, что куки не были успешно переданы ..
Затем я попытался извлечь куки-файлы, на которые сервер ответил при входе в систему, и отправить их вместе с этим запросом.
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.
Я пытался отправить этот куки в моей странице запроса.
var header = {'Cookie':cookie};
var opt2 = {"header":header};
var pagedata = UrlFetchApp.fetch("http://website.com/page",opt2);
Я думаю, что даже сейчас куки не были отправлены должным образом, так как содержание снова говорит мне, чтобы войти.
Я правильно передаю файлы cookie? Мне нужна помощь относительно правильного способа отправки куки в запросе.
http: //www.w3.org/Protocols/rfc2109/rfc210
У вас есть потенциальная проблема в вашем коде: response.getAllHeaders () ['Set-Cookie'] может вернуть либо строку, либо таблицу строк, если с сервера отправлено несколько атрибутов 'set-cookie'.
Эрик прав, вы не можете вернуть cookie, не переварив его.
Вторая ошибка в вашем коде:
var opt2 = {"header":header};
должно быт
var opt2 = {"headers":header};
Знайте также, что ГАЗ использует IP-адреса Google. Может случиться так, что две последовательные выборки используют разные IP-адреса. Сервер, к которому вы подключаетесь, может зависеть от IP-адреса сеанса.
Вы уверены, что сервер отправляет вам только один файл cookie после аутентификации?
"headers"
akarthik10
"headers"
и это сработало. Я могу подтвердить, что это работает. Я сделал файл PHP, который записывает все заголовки, с которыми он был запрошен. Я запросил его с помощью UrlFetchApp и увидел в своем журнале все пользовательские заголовки, которые я отправил с UrlFetchApp. Так что, где я сделал ошибку, был"header"
и это должно быть"headers"
. Спасибо
akarthik10
Я считаю, что данные в заголовке Set-Cookie находятся в другом формате, чем данные, которые ожидаются в заголовке Cookie. Например, Set-Cookie содержит информацию об истечении срока действия и т. Д.
Set-Cookie: JSESSIONID=A04~1E321E3265CB36814498F30B8D134667.w804; Path=/
. Я попытался передать весь файл cookie (включаяPath=/
) и отправка толькоJSESS..
(используя разделение с; в качестве разделителя) cookie. Оба провалились.
akarthik10
моей таблицы Google, и я думаю, что это не работает. Печенье отличается в течение нескольких минут.
Ниже вы найдете четыре куки, используяUrlFetchApp.fetch()
из запроса сценария электронной таблицы Google на один и тот же сайт, только минуты разные ... Я думаю, что возможно, что используются 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