Google Apps脚本UrlFetchApp在URL存在时返回404

Dou*_*ell 1 javascript pdf google-apps-script

我正在尝试检索电子表格的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_ext是参数.

var response = UrlFetchApp.fetch(url + url_ext);
Run Code Online (Sandbox Code Playgroud)

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

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

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

编辑:它已经自发地开始研究我的测试应用程序脚本.但是,如果我在另一个应用程序脚本中创建完全相同的功能,则会再次出现404错误.

我做了一些更多的故障排除,并将工作功能直接复制粘贴到新的应用程序脚本项目中.该功能成功运行,之后非工作功能正常运行.

在失败和工作之间没有对非工作功能进行过编辑.

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

Spe*_*ton 7

您缺少提出此请求的正确范围.它应返回401未经身份验证而不是404.要解决此问题,您需要添加驱动器范围.我通过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);
}
Run Code Online (Sandbox Code Playgroud)