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

11

我在谷歌云端硬盘上有一个电子表格,我想从另一个网站下载CSV文件并将其放入我的电子表格中。问题是我必须先登录到该网站,因此我需要使用一些HTTP请求来完成。

我找到了这个这个网站。如果其中任何一个网站提供了答案,那么显然我没有足够的理解力来弄清楚它们。能否有人帮助我解决这个问题?我感觉第二个网站尤其接近我所需要的,但我不明白它在做什么。

再次澄清,我想通过HTTP请求进行登录,然后调用与获取CSV文件的不同URL相同的网站。

1个回答

14

过去一个月以来,我已经做了很多类似的事情,所以应该能够帮助您。我们正在尝试模拟浏览器的行为,因此首先需要使用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进行匹配)。下一步完全取决于该网站,因此我将给出一个一般性的示例。

我们已经登录到网站(为了确认,请仅记录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())

现在应该已经记录了文件,您可以使用GAS内置函数解析csv并将数据转储到电子表格中。

需要注意以下几点:

  • 我假设所有表单提交的值都是静态的,并且可以硬编码。如果不是这种情况,请告诉我,我将为您提供一个可以从HTML中提取值的函数。
  • 有些网站需要浏览器发送一个令牌值(该值将存在于HTML中),以及凭据。在这种情况下,您需要提取值,然后进行提交。

你好,Abnishek Ram。我遇到了和 OP 几乎相同的问题,但我的用户名和密码不能是硬编码。应用程序流程如下:用户必须在 HTML 页面的输入字段中输入他的“用户名”和“密码”,然后如果它们正确,用户必须同时登录应用程序和第三方网站。请问你能帮我吗? - Valip
@PavelValeriu,我不确定我理解你的要求。你能详细解释一下“已登录应用程序”的含义吗?你在这里如何使用Google应用脚本?我建议你创建一个新帖子。 - Abhishek Ram
我创建了一个新的帖子,请在这里查看:http://stackoverflow.com/questions/37675406/google-script-authenticate-on-external-website - Valip
有人找到了使用基于短信的两步验证登录的方法吗? - thdoan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接