Google Apps脚本使用HTTP请求登录网站

时间:2014-02-07 06:43:44

标签: authentication google-apps-script httprequest

我的Google云端硬盘上有一个电子表格,我想从其他网站下载CSV并将其放入我的电子表格中。问题是我必须先登录网站,所以我需要使用一些HTTP请求来做到这一点。

我找到了this网站和this。如果这些网站中的任何一个都有答案,那么我显然不了解它们就足以弄明白了。有人可以帮我解决这个问题吗?我觉得第二个网站特别接近我的需求,但我不明白它在做什么。

为了再次澄清,我想使用HTTP请求登录,然后使用不同的URL调用同一网站,该URL是获取CSV文件的调用。

1 个答案:

答案 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并将数据转储到电子表格中。

需要注意几点:

  • 我假设所有表单帖子值都是静态的,可以是 硬编码,如果不是这样,请告诉我,我会给你 一个可以从html中提取值的函数。
  • 某些网站要求浏览器发送令牌值(该值将出现在html中)以及凭据。在这种情况下,您需要提取值然后发布。