Google Apps 脚本中的 Cookie 处理 - 如何在标头中发送 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 的文本。现在我需要获取 http://website.com/page 的内容并进行处理。我首先假设脚本可以自己处理 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 的正确方法的帮助。

stack overflow Cookie handling in Google Apps Script - How to send cookies in header?
原文答案
author avatar

接受的答案

在这里您可以找到cookie规范: http://www.w3.org/Protocols/rfc2109/rfc2109

您在代码中存在潜在的问题:response.getallheaders()['set-cookie']如果从服务器发送了多个“ set-cookie'属性,则可以返回字符串或字符串表。

埃里克(Eric)是对的,您不能不消化饼干。

代码中的第二个错误:

var opt2 = {"header":header};

应该

var opt2 = {"headers":header};

请注意,GAS使用Google IPS。可能会连续两次提取使用不同的IP。您正在连接到的服务器可能是session-ip依赖性的。

您确定服务器在身份验证后仅向您发送一个cookie吗?


答案:

作者头像

看来您正在在urlfetchapp.fetch()中正确设置标头。

我相信Set-Cookie标头中的数据与Cookie标头中预期的数据的格式不同。例如,Set-Cookie包含有关到期的信息,等等。