无法获取Google Script的URL

时间:2014-08-08 04:50:54

标签: google-apps-script fetch

网址:https://script.google.com/a/macros/MyDomain.com/s/MyProjectId/exec

使用网址在我的Google脚本中触发doGet(): 成功:手动在浏览器中输入上方的Url。 失败:通过Google脚本获取UrlFetchApp.fetch(URL)

Google Script的网址不允许按程序抓取吗?或者我犯了任何愚蠢的错误?

我试图通过post方法获取测试doPost(),但结果相同。

N.B.I我添加了我的域名& script.google.com到API& auth / Push,并处理OAuth。没有更多授权弹出窗口。所以不要假设这些问题。

~~~~~~~~~~~~~~~~~~~~~~~~~

有些人说这个问题来自Google Apps&#goca()& amp;的doPost()。但经过测试,无论我是在个人Gmail帐户还是Google Apps帐户上运行它都是失败的,无论是以开发人员,域用户还是匿名用户身份运行它。下面是演示代码,不包括冗长的标准授权代码。

var REDIRECT_URL = 'https://script.google.com/macros/s/.../exec'; 
var SysEmail = "EmailAddress";

function doGet(e) {
  MailApp.sendEmail(SysEmail, 'Test', 'doGet has received Push Notification');
}

//Running below function should trigger above doGet() theoretically, but not actually.
function TestGetByManual(){
  var payload =
      {
        "kind" : "Test",
      };
  var options =
      {
        "method" : "get",
        "followRedirects" : true,
        "payload" : payload        
      };
  var vResult = UrlFetchApp.fetch(REDIRECT_URL, options);
  //vResult is Google's Login page. 
}

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
经过最新的测试,我发现Google的行为如下:

由于Google的安全性如此强大,因此设置参数" followRedirects"真实是无助的。当Fetch在doGet()或doPost()之前与Google会面时,由于授权审核,它将被停止。如果是手动提取(例如用户通过浏览器安装),则会弹出一个授权窗口(例如,如果doGet()包含授权代码)。但是,如果它被另一个App提取,就像我的情况一样,一切似乎都停止了,doGet()及其授权代码永远不会被调用!

唯一的解决方法是:如果我可以将应用程序设置为以我的身份执行并且可以通过匿名访问,那么将不会检查任何权限,所有内容都将直接进行。不幸的是,即使忽略安全问题,只有个人Gmail帐户才能进行此设置。我,使用Google Apps帐户,无法制作这个" Anonymous"设置。

如果要调用授权码,我认为还有希望。但是如果我的测试结果是正确的并且在停止之前没有调用授权代码,我相信它是一个死角。

这里的情况仍然更好。如果调用者不是可控制的自定义函数,而是像Drive.changes.watch()这样无法控制的系统函数,那么一切都将变得更加无助。 (请参阅我的另一篇文章,这是我的最终目标:Use Google Script's Web App as Webhook to receive Push Notification directly

如果这里有任何大四学生可以联系谷歌的Arun Nagarajan,请帮助他确认。

1 个答案:

答案 0 :(得分:0)

使用以下代码正常工作:

var REDIRECT_URL = 'https://script.google.com/macros/s/AKf.../exec'; 
var SysEmail = "anemail";

function doGet(e) {
  MailApp.sendEmail(SysEmail, 'Test', 'doGet has received Push Notification');
}

function TestGetByManual(){
  var vResult = UrlFetchApp.fetch(REDIRECT_URL);
  Logger.log(vResult);
}

确保您保存新版本并使用该版本重新发布该网址并使用正确的已发布网址。