我的Google云端硬盘上有一个电子表格,我想从其他网站下载CSV并将其放入我的电子表格中。问题是我必须先登录网站,所以我需要使用一些HTTP请求来做到这一点。
我找到了this网站和this。如果这些网站中的任何一个都有答案,那么我显然不了解它们就足以弄明白了。有人可以帮我解决这个问题吗?我觉得第二个网站特别接近我的需求,但我不明白它在做什么。
为了再次澄清,我想使用HTTP请求登录,然后使用不同的URL调用同一网站,该URL是获取CSV文件的调用。
答案 0 :(得分:9)
我在过去一个月里做了很多这样的事情,所以我应该可以帮助你,我们试图模仿这里的浏览器行为,所以首先你需要使用chrome的开发者工具(或类似的东西)并记下确切的事情浏览器确实发布了表单值,调用的URL等等。以下示例显示了要使用的一般技术:
第一步是登录网站并获取会话cookie:
var payload =
{
"user_session[email]" : "username",
"user_session[password]" : "password",
};// The actual values of the post variables (like user_session[email]) depends on the site so u need to get it either from the html of the login page or using the developer tools I mentioned.
var options =
{
"method" : "post",
"payload" : payload,
"followRedirects" : false
};
var login = UrlFetchApp.fetch("https://www.website.com/login" , options);
var sessionDetails = login.getAllHeaders()['Set-Cookie'];
我们已登录网站(为了确认只记录sessionDetails并将其与chrome设置的cookie匹配)。下一步完全依赖于网站,所以我将给你一个通用的例子
var downloadPayload =
{
"__EVENTTARGET" : 'ctl00$ActionsPlaceHolder$exportDownloadLink1',
};// This is just an example it may or may not be needed, if needed u need to trace the values from the developer tools.
var downloadCsv = UrlFetchApp.fetch("https://www.website.com/",
{"headers" : {"Cookie" : sessionDetails},
"method" : "post",
"payload" : downloadPayload,
});
Logger.log(downloadCsv.getContentText())
现在应该记录该文件,然后您可以使用hte GAS内置函数解析csv并将数据转储到电子表格中。
需要注意几点: