使用 UrlFetchApp.fetch 和 google 脚本对 openDNS 进行身份验证

问题描述

我正在尝试制作一个小脚本,从 openDNS 获取顶级域 csv 文件并将它们保存在谷歌驱动器上。我无法克服的绊脚石是身份验证。我试图从 net 上的 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,"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);

  
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...