【问题标题】:Google Apps Script UrlFetchApp returns 404 when the URL exists当 URL 存在时,Google Apps 脚本 UrlFetchApp 返回 404
【发布时间】:2016-04-07 00:16:52
【问题描述】:

我正在尝试检索电子表格的 pdf。每当我尝试时,我都会收到以下错误:

https://docs.google.com/a/firstcallres.com/spreadsheets/d/1ZPcW5cOQT5w28VUbr_JG9U-r7m6Uf-MDQcSmFOyhbE8/export?exportFormat=pdf&format=pdf&size=letter&portrait=false&fitw=true&source=labnol&sheetnames=false&printtitle=false&pagenumbers=false&gridlines=false&fzr=false&gid=1680655368 请求失败,返回代码 404。

如果我在登录时单击上述 URL,则会下载 PDF。

如果我使用以下代码,我将返回一个登录页面作为响应。 URL 是工作表 url,url_ext 是参数。

var response = UrlFetchApp.fetch(url + url_ext);

如果我随后将以下代码与 OAuth 令牌一起使用,我会收到 404 响应。

  var response = UrlFetchApp.fetch(url + url_ext, {
          headers: {'Authorization': 'Bearer ' +  ScriptApp.getOAuthToken() }
          });

为什么会这样?如何使用令牌通过应用程序脚本访问工作表以检索 PDF?

编辑:它自发地开始处理我的测试应用脚本。但是,如果我在另一个应用程序脚本中创建完全相同的函数,它会再次失败并出现 404 错误。

我做了更多故障排除,并将工作功能复制粘贴到新的应用程序脚本项目中。该功能成功运行,之后非工作功能现在可以工作。

在它失败和工作之间没有对非工作功能进行任何编辑。

Edit2:我可以重现此错误:如果我使用我的第二个工作函数,并将其复制粘贴到新项目中,它将失败并出现 404 错误。我不知道为什么会发生这种情况,但是当它在其他地方使用完全相同的代码工作时,我可以成功重现 404 错误。

【问题讨论】:

  • 您可能需要查看question 31891694。使用 UrlFetchApp.fetch 方法处理 404 错误时存在问题。
  • 嘿 lex,如果我将 http 错误设为静音,我将无法返回任何真实数据,就好像它进入了一个空白页面一样。
  • 请在此链接上查看UrlFetchApp
  • 嘿莱克斯。 URLFetchApp 文档已经过时了。他们的 OAuth 示例使用了很久以前贬值的服务。

标签: javascript pdf google-apps-script


【解决方案1】:

您缺少发出此请求的正确范围。它应该返回未经身份验证的 401 而不是 404。要解决此问题,您需要添加 Drive 范围。我通过在脚本中的某处进行简单的DriveApp.getRootFolder() 调用来做到这一点。这会将驱动范围添加到您的项目中。不过,对 DriveApp 的任何调用都会增加范围。

这是一个示例脚本:

function exportToPDF() {    
  var url = "https://docs.google.com/spreadsheets/d/1oQ2zsbcCwuc_wdwgfFopRJn-5fGN3oY7L237ivxuxmM/export?exportFormat=pdf"; //add your options as you wish
  var res = UrlFetchApp.fetch(url, {headers:{"Authorization":"Bearer " + ScriptApp.getOAuthToken()},muteHttpExceptions:true});
  var newPdf = Utilities.newBlob(res.getContent(), "application/pdf", "Export.pdf")
  DriveApp.createFile(newPdf);
}

【讨论】:

    猜你喜欢
    • 2011-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多