Google Apps脚本中的Cookie处理 - 如何在标题中发送Cookie? [英] Cookie handling in Google Apps Script - How to send cookies in header?

查看:190
本文介绍了Google Apps脚本中的Cookie处理 - 如何在标题中发送Cookie?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想写一个简单的脚本,从网页获取文本并处理该字符串。但是,该网站要求我登录。我成功登录该网站。这是我登入的方式:

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

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

var respose = UrlFetchApp.fetch(http: 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);//不工作

这显然没有工作, pagedata.getContentText()说我首先登录,这表示cookie没有成功传递..



然后我尝试提取服务器在登录期间响应的cookies,并将其与此请求一起发送。

  var cookie = response.getAllHeaders()['Set-Cookie']; 

//变量cookie现在包含合法的cookie。

//它包含'JSESSIONID = blabla; Path = /'和
//它是服务器响应的唯一cookie。

我尝试在我的网页请求中发送该Cookie。

  var header = {'Cookie':cookie}; 

var opt2 = {header:header};

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

我想即使现在cookie没有正确发送,内容再次说我要登录。 p>

我正确传递Cookie吗?我需要关于在请求中发送Cookie的正确方法的帮助。

解决方案

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



您的代码中有一个潜在的问题:
response.getAllHeaders()['Set-Cookie']可以返回字符串或字符串表,如果多个'set-cookie'属性



第二步是从服务器返回。



错误代码:

  var opt2 = {header:header}; 

应为

  var opt2 = {headers:header}; 

请注意,GAS使用Google IP。可能发生两个连续的提取使用不同的IP。
您连接的服务器可能是会话IP依赖的。



您确定服务器在验证后只发送一个Cookie吗?


I'm trying to write a simple script that fetches text from a webpage and processes that string. But, that website requires me to be logged in. I was successful in logging in to that website. This is how I logged in:

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

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

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

After logging in, the website places me in http://website.com/home. I checked response.getContentText() and I can confirm that I have been logged in successfully as it contains the text from http://website.com/home. Now I need to get the contents of http://website.com/page and process it. I first assumed the script can handle cookies by itself and proceeded with

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

That obviously didnt work and pagedata.getContentText() says me to login first, which indicates cookies were not successfully passed..

I then tried to extract cookies which the server responded during login and to send it along with this request.

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.

I tried to send that cookie in my page request.

var header = {'Cookie':cookie};

var opt2 = {"header":header};

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

I think even now cookies were not properly sent, as the content again says me to login.

Am I passing cookies correctly? I need help regarding the correct method of sending cookies in a request.

解决方案

Here you can find cookies specification: http://www.w3.org/Protocols/rfc2109/rfc2109

You have a potential issue in your code: response.getAllHeaders()['Set-Cookie'] can return either a string or a table of string if multiple 'set-cookie' attributes are sent back from the server.

Eric is right, you cannot return the cookie without digesting it.

Second error in your code:

var opt2 = {"header":header};

should be

var opt2 = {"headers":header};

Be aware also that GAS uses Google IPs. It can happen that two consecutive fetch use different IPs. The server your are connecting to may be session-IP dependant.

Are you sure the server only send you back one cookie after an authentification ?

这篇关于Google Apps脚本中的Cookie处理 - 如何在标题中发送Cookie?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆