Google Apps脚本(GAS)使用urlfetchapp和用户名和密码

时间:2016-02-25 16:51:08

标签: google-apps-script

我本质上不是编码员,而是在GAS中自学(仅使用我编写的代码)。我在City College Norwich工作,我想创建一个脚本,自动将我登录到他们的网站,这样我就可以获取时间表数据并将其放入电子表格中。

在做了一些研究之后,我放弃了试图解决它,所以我正在寻求帮助。

我试过这个:

function getTimetables() {
 var url = "https://ccn.ac.uk/user/";
   var options = {
      "method": "post",
      "payload": {
      "user-login" : "username",
      "edit-pass" : "password",
      "BUTTON_Submit" : "Log In",
      },
      "testcookie": 1,
      "followRedirects": false
   };
   var response = UrlFetchApp.fetch(url, options);
   if ( response.getResponseCode() == 200 ) {
     // Incorrect user/pass combo
     Logger.log('Incorrect user/pass combo')
   } else if ( response.getResponseCode() == 302 ) {
     // Logged-in
     var headers = response.getAllHeaders();
     if ( typeof headers['Set-Cookie'] !== 'undefined' ) {
        // Make sure that we are working with an array of cookies
        var cookies = typeof headers['Set-Cookie'] == 'string' ? [ headers['Set-Cookie'] ] : headers['Set-Cookie'];
        for (var i = 0; i < cookies.length; i++) {
           // We only need the cookie's value - it might have path, expiry time, etc here
           cookies[i] = cookies[i].split( ';' )[0];  
        };

        url = "https://mytimetable.ccn.ac.uk/timetable.aspx?week=30&room=C5A";
        options = {
            "method": "get",
            // Set the cookies so that we appear logged-in
            "headers": {
               "Cookie": cookies.join(';') 
            }
        } 
     }
   }
}

返回“用户/通过组合不正确”。

我试过这个:

function getTimetablev2() {
var site = "https://ccn.ac.uk/user"
var USERNAME = PropertiesService.getScriptProperties().getProperty('username');
var PASSWORD = PropertiesService.getScriptProperties().getProperty('password');

var url = PropertiesService.getScriptProperties().getProperty(site);

  var headers = {
    "Authorization" : "Basic " + Utilities.base64Encode(USERNAME + ':' + PASSWORD)
  };

var params

 = {
    "method":"GET",
    "headers":headers
  };

var response = 

UrlFetchApp.fetch(site, params); 
  Logger.log(response.getResponseCode())
}

返回代码200 - 无法登录。

如果有人能为我解决这个问题,我会永远负债,因为这会节省我的时间。我已经创建了一个实用的预订系统,每个老师都有自己的电子表格,其中包含时间表,所有预订都会发送给我们技术人员使用的主电子表格。如果我可以自动生成他们的时间表,那就太棒了。

1 个答案:

答案 0 :(得分:0)

如果不知道https://ccn.ac.uk/user/的有效HTTP POST看起来如何,则很难回答您的问题。所以......

使用hurl.it和第一个代码段中提供的有效负载......它看起来不像是一个有效的POST。

使用firebug并在表单中输入虚拟数据,您可以查看POST是如何正确完成的。

valid post request

这些是您应在请求正文中使用的参数。

如果此网站除了使用此表单之外本身不支持身份验证,那么您的第二个代码段不太可能正常工作。