Google Apps 脚本:仅在浏览器/编辑器中提取失败,并出现 401 错误

Google Apps Script: Fetch Fails Only in Browser/Editor with 401 Error

提问人:Scott 提问时间:9/1/2023 更新时间:9/1/2023 访问量:64

问:

在 Google Apps 脚本中通过 UrlFetchApp.fetch 发出 GET 请求会返回 401 截断服务器响应错误,但仅在编辑器/浏览器窗口中运行时才会返回。

我在 Google Apps 脚本中有以下代码,该代码对我们的某个供应商进行 API 调用:

function test() {
  //Get session ID from vendor. This always works.
  var sesResponse = JSON.parse(UrlFetchApp.fetch("https://www2.pcrecruiter.net/rest/api/access-token/?Username=redacted&Password=redacted&DatabaseId=redacted.redacted&ApiKey=abcdefghijklmnopqrstuvwxyz&AppId=123456"));
  sessionID = sesResponse.SessionId;
  console.log("sessionID = " + sessionID);

  //Make GET request to one of their API endpoints using acquired session ID. This returns a 401 Truncated Server Response
  var response = JSON.parse(UrlFetchApp.fetch("https://www2.pcrecruiter.net/rest/api/candidates/?SessionID=" + sessionID + "&Query=MobilePhone%20co%201234567899&ResultsPerPage=100").getContentText());
  console.log(response);
}

获取会话 ID 始终是成功的。但是,对 /candidates 终结点的第二个提取请求将返回以下错误:

Exception: Request failed for https://www2.pcrecruiter.net returned code 401. Truncated server response: {"errors":"   at Microsoft.VisualBasic.ErrObject.Raise(Int32 Number, Object Source, Object Description, Object HelpFile, Object HelpContext)\r\n   ... (use muteHttpExceptions option to examine full response)

一时兴起,我尝试设置一个“每分钟”触发器来执行上面完全相同的代码,它运行得完美无缺。我们办公室的静态 IP 以及 Google 的官方 IP 列表 (https://www.gstatic.com/ipranges/goog.txt) 都在供应商的白名单上,因此不应阻止来自任何一个来源的请求。

为什么 UrlFetchApp GET 请求在仅从浏览器/GAS 编辑器执行时会返回 401 错误?

google-apps-script http-status-code-401 urlfetch

评论

0赞 Tanaike 9/1/2023
虽然我无法测试您的脚本,也不确定您的情况是否相关,但您的情况是否与这些线程有关?stackoverflow.com/q/63024346stackoverflow.com/q/70118777
0赞 Scott 9/1/2023
@Tanaike感谢您的建议,但不幸的是,它们没有回答我的问题。不过,我尝试通过 UrlFetchApp 向编辑器中的 httpbin.org/get 发送 GET 请求,而不是通过触发器。触发器执行在“origin”标头中仅列出一个 URL(一个 Google IP),而编辑器执行会列出两个 IP(我的办公室 IP,然后是一个随机的 Google IP)。不确定这是否会影响它,但这是我能发现的唯一区别。
0赞 Tanaike 9/2/2023
感谢您的回复。我深表歉意,我的评论对您的情况没有用。

答: 暂无答案