Аутентификация в openDNS с использованием UrlFetchApp.fetch и скриптов Google
Я пытаюсь сделать небольшой скрипт, который берет CSV-файлы верхнего домена из openDNS и сохраняет их на диске Google. Камнем преткновения, который я не могу преодолеть, является аутентификация. Я пытался вдохновиться скриптами для Linux или Microsoft, выложенными в сети , но ничего не поделаешь. здесь ниже последняя версия скрипта, который я тестирую
function Fetcher() {
//1)the login page is called up to get the cookies and formtoken
var url = 'https://login.opendns.com/';
var response = UrlFetchApp.fetch(url);
var html = response.getContentText();
var $ = Cheerio.load(html);
if ($('input[name="formtoken"]').attr('value')) {
formtoken = $('input[name="formtoken"]').attr('value').trim();
}
var headers = response.getAllHeaders();
var cookies = headers['Set-Cookie'];
if ( (cookies != null) && (cookies[0].length == 1) ) {
cookies = new Array(1);
cookies[0] = headers['Set-Cookie'];
}
var responsecode1=response.getResponseCode();
//2) with the formtoken and the cookies you log into opndns
var payload = {
username : "myusername",
password : "mypassword",
formtoken: formtoken,
source: "dashboard",
return_to: "https://dashboard.opendns.com",
loginToken: ""
};
var params = {
"followRedirects": true,
"muteHttpExceptions": true,
"method":"POST",
"headers": {"Cookie": cookies},
"payload": payload
};
var response = UrlFetchApp.fetch(url, params);
var headers = response.getAllHeaders();
var cookies = headers['Set-Cookie'];
if ( (cookies != null) && (cookies[0].length == 1) ) {
cookies = new Array(1);
cookies[0] = headers['Set-Cookie'];
}
var html = response.getContentText();
var responsecode2=response.getResponseCode();
//3) now that I'm inside I download the file
var params = {
"followRedirects": true,
"muteHttpExceptions": true,
"method":"GET",
"headers": {"Cookie": cookies}
};
var url = 'https://dashboard.opendns.com/stats/MYDNSNETWORKID/topdomains/2020-09-14.csv';
var response = UrlFetchApp.fetch(url, params);
var html = response.getContentText();
var responsecode3=response.getResponseCode();
Logger.log(responsecode1+' '+responsecode2+' '+responsecode3+' '+formtoken+' '+cookies+' '+html);
var file = response.getBlob();
DriveApp.getFolderById('MYDRIVEFOLDERID').createFile(file);
}