问题描述
我想写一个简单的脚本,从网页获取文本并处理该字符串。但是,该网站要求我登录。我成功登录该网站。这是我登入的方式:
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规范:
您的代码中有一个潜在的问题:
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?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!