Google Script 是否有等效于 python 的 Session 对象?



我有这个python脚本,我想得到谷歌脚本等效但我不知道如何"通过"一旦我登录,需要在下一次get或post请求之间传递的任何内容

import requests
import json
# login
session = requests.session()
data = {
'LoginName': 'name',
'Password': 'password'
}
session.post('https://www.web.com/en-CA/Login/Login', data=data)
session.get('https://www.web.com//en-CA/Redirect/?page=Dashboard')

# get customer table
data = {
'page': '1',
'pageSize': '100'
}
response = session.post('https://www.web.com/en-CA/Reporting', data=data)
print(response.json())

我想知道是否有一个等效的.session()对象从python的请求模块。我确实搜索了谷歌,但找不到任何可行的例子。我不是一个程序员,所以我不确切地知道。session()对象。当提出新的请求时,是否足以从响应中传递报头?

我在其他一些问题中读到,谷歌可能使用每个UrlFetchApp.fetch不同的IP,所以登录和cookie可能无法工作,我猜。

我相信你的目标如下。

  • 你想用Google Apps script实现你的python脚本。

问题和解决方法:

如果我的理解是正确的,当使用python的session()时,通过保留cookie可以实现多个请求。例如,为了使用Google Apps Script实现这种情况,我认为在第一次请求时检索cookie,并且检索到的cookie包含在第二次请求的请求头中。因为,在当前阶段,UrlFetchApp没有办法直接保存cookie并在下一个请求中使用它。

从上面的情况,当你的脚本转换为Google Apps脚本,它变成如下:

示例脚本:

function myFunction() {
const url1 = "https://www.web.com/en-CA/Login/Login";
const url2 = "https://www.web.com//en-CA/Redirect/?page=Dashboard";
const url3 = "https://www.web.com/en-CA/Reporting";

// 1st request
const params1 = {
method: "post",
payload: {LoginName: "name", Password: "password"},
followRedirects: false
}
const res1 = UrlFetchApp.fetch(url1, params1);
const headers1 = res1.getAllHeaders();
if (!headers1["Set-Cookie"]) throw new Error("No cookie");
// 2nd request
const params2 = {
headers: {Cookie: JSON.stringify(headers1["Set-Cookie"])},
followRedirects: false
};
const res2 = UrlFetchApp.fetch(url2, params2);
const headers2 = res2.getAllHeaders();
// 3rd request
const params3 = {
method: "post",
payload: {page: "1", pageSize: "100"},
headers: {Cookie: JSON.stringify(headers2["Set-Cookie"] ? headers2["Set-Cookie"] : headers1["Set-Cookie"])},
followRedirects: false
}
const res3 = UrlFetchApp.fetch(url3, params3);
console.log(res3.getContentText())
}
  • 通过这个示例脚本,可以从第一个请求中检索cookie,并且检索的cookie可以用于下一个请求。
  • 不幸的是,我没有你的实际服务器的信息,我无法测试你的实际url。所以我不确定这个示例脚本是否直接适用于您的服务器。
  • 并且,我不确定是否需要在每个请求中包含followRedirects: false。因此,当出现错误时,请将其删除并重新测试。
  • 关于包含cookie到请求头的方法,可能不需要使用JSON.stringify。但是,我不确定这是否适合您的服务器。
  • 参考:

类UrlFetchApp

你可能想试试这个:

var nl = getNewLine()
function getNewLine() {
var agent = navigator.userAgent
if (agent.indexOf("Win") >= 0)
return "rn"
else
if (agent.indexOf("Mac") >= 0)
return "r"
return "r"
}
pagecode = 'import requests
import json
# login
session = requests.session()
data = {
'LoginName': 'name',
'Password': 'password'
}
session.post('https://www.web.com/en-CA/Login/Login', data=data)
session.get('https://www.web.com//en-CA/Redirect/?page=Dashboard')

# get customer table
data = {
'page': '1',
'pageSize': '100'
}
response = session.post('https://www.web.com/en-CA/Reporting', data=data)
print(response.json())'
document.write(pagecode);

我使用了这个程序

最新更新