session - Google Script 是否有等效于 python 的 Session 对象?
问题描述
我有这个 python 脚本,我想获得等效的谷歌脚本,但我不知道如何“传递”登录后下一次获取或发布请求之间需要传递的任何内容。
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())
我想知道 python 的 requests 模块中是否有一个等价的.session()
对象。我确实搜索了谷歌,但找不到任何工作示例。我不是编码员,所以我完全知道 .session() 对象确实如此。发出新请求时从响应中传递标头就足够了吗?
更新
我读到了其他一些问题,谷歌可能会为每个UrlFetchApp.fetch
不同的 IP 使用,所以登录和 cookie 可能不起作用,我猜。
解决方案
我相信你的目标如下。
- 您想使用 Google Apps Script 实现您的 python 脚本。
问题和解决方法:
如果我的理解是正确的,当session()
使用python时,可以通过保留cookie来实现多个请求。例如,为了使用 Google Apps 脚本实现这种情况,我认为 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
可能不需要使用。但是,对于您的服务器,我不确定这一点。
参考:
推荐阅读
- java - 如何每 10 分钟重置一次线程?
- qt - Squish 不记录 Qt 应用程序中映射键的按键事件
- sql - CASE 条件和 SUM() 公用表表达式或 Group By
- oracle - 如何通过 Apache NiFi 提高从 Oracle 到 IBM DB2 的批量插入速度
- python - 如何进入 tktinker 中的另一个窗口并销毁前一个窗口
- html - 如何在 dart html 中创建自定义元素
- json - Swift:在结构中具有 Encodable 一致性的自定义键值编码
- python - AttributeError:“Bot”对象没有属性“pin_message”
- jib - 有没有办法自定义 jib 添加的 extraDirectories 的所有者?
- vba - VBA 单击 MS Access 应用程序按钮