2016-02-25 135 views
0

我本質上不是一名編碼人員,並且在GAS中自學(僅使用我所使用的代碼)。我爲諾里奇城市學院工作,我想創建一個腳本,自動將我登錄到他們的網站,以便我可以獲取時間表數據並將其放入電子表格中。Google Apps腳本(GAS)使用帶用戶名和密碼的urlfetchapp

做了一些研究後,我放棄了試圖找出它,所以我尋求幫助。

我已經試過這樣:

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 - 登錄失敗

如果有人能解決這個問題對我來說,我會永遠感激你,因爲它會救我。時間的負載。我已經創建了一個實用的預訂系統,每個老師都有自己的電子表格,並附有他們的時間表,所有預訂都發送給我們技術人員使用的主電子表格。如果我能夠自動生成時間表,那就太棒了。

回答

0

不知道如何有效的HTTP POST到https://ccn.ac.uk/user/看起來,很難回答你的問題。所以...

使用hurl.it和您的有效載荷在第一個代碼片段中提供...它看起來不是這是一個有效的POST。

使用firebug並將虛擬數據輸入到表單中,您可以查看POST是如何正確完成的。

valid post request

這些都是你應該在你的請求正文使用的參數。


你的第二個代碼段是不太可能,如果這個網站本身不支持其他的認證不是使用這種形式的合作。