Вопрос по http – Обработка файлов cookie в скрипте Google Apps - Как отправить файлы cookie в заголовок?

15

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

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? Мне нужна помощь относительно правильного способа отправки куки в запросе.

Ваш Ответ

3   ответа
7

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 после аутентификации?

Спасибо за указание на это! Да, я уверен, что сервер отправляет только один файл cookie авторизации. Я постараюсь сообщить с"headers" akarthik10
EDIT: я попробовал это с"headers" и это сработало. Я могу подтвердить, что это работает. Я сделал файл PHP, который записывает все заголовки, с которыми он был запрошен. Я запросил его с помощью UrlFetchApp и увидел в своем журнале все пользовательские заголовки, которые я отправил с UrlFetchApp. Так что, где я сделал ошибку, был"header" и это должно быть"headers". Спасибо akarthik10
2

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

Я убедился, что этоSet-Cookie: JSESSIONID=A04~1E321E3265CB36814498F30B8D134667.w804; Path=/. Я попытался передать весь файл cookie (включаяPath=/) и отправка толькоJSESS.. (используя разделение с; в качестве разделителя) cookie. Оба провалились. akarthik10
0

моей таблицы 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                    

Похожие вопросы