我正在尝试从aspx网站上获取csv
。没有直接链接到csv
,它是发布表单时服务器生成的。
以下内容在使用 UrlFetchApp 的 Google App 脚本中正常工作: 它返回原始.csv
数据。
..// other code omitted for brevity
var page = UrlFetchApp.fetch(
"https://www.mycompanyurl.com/summary.aspx", {
"method": "POST",
"headers": {"Cookie": myCookieData},
"payload": {
'_ctl0:contact:isActive': '1',
'__VIEWSTATE': myViewstateData,
'__EVENTTARGET': '_ctl0:Main:ButtonExport',
'__EVENTARGUMENT': '',
'__LASTFOCUS': '',
'__VIEWSTATEENCRYPTED': '',
'__PREVIOUSPAGE': ''
}
});
Logger.log(page); // <---- prints the csv file content
我试图在 python 请求库中模拟这一点。
..// other code omitted for brevity
..// cookies are in the session 's'
page = s.post(
'https://www.mycompanyurl.com/summary.aspx',
data={
'_ctl0:contact:isActive': '1',
'__VIEWSTATE': myViewstateData,
'__EVENTTARGET': '_ctl0:Main:ButtonExport',
'__EVENTARGUMENT': '',
'__LASTFOCUS': '',
'__VIEWSTATEENCRYPTED': '',
'__PREVIOUSPAGE': ''
}
);
print(page) // <---- prints the html content of the page
我省略了我尝试过的其他 2 个库,它们以相同的结果结束。 axios (node.js) 和 request (node.js)
为什么该请求适用于 Google 脚本,但在其他更流行的库中无效。
可能我错过了一些简单的东西,但是经过几个小时的尝试不同的标头配置和多个库,我不知所措。
我可以看到两个代码片段之间的第一个区别是你没有将cookie传递到Python版本中。
如果您查看一下响应中得到的 HTML,那将是有益的。也许有一些错误消息(例如:请登录)。
尝试将 cookie 添加到请求中,看看是否有帮助。