Google App Script:在 GAS 中运行 UrlFetchApp 时为 403

Google App Script : 403 when running UrlFetchApp in GAS

提问人:Ken Yurino 提问时间:10/30/2023 更新时间:11/1/2023 访问量:66

问:

我正在创建一个 API 来记录 Google 表单响应。

我已经在 GAS 中实现了以下代码,并在提交 Google 表单时使用 GAS 中的 UrlFetchApp 来运行 Endpoint。

执行 UrlFetchApp 时,有时它以 200 成功,有时以 403 失败,我想知道为什么会生成 403。 我正在使用 Google 表单和 API 服务器端执行的相同参数进行测试。

function onFormSubmit(e) {
  const responses = e.response.getItemResponses();
  const userId = responses[0].getResponse()
  const questionnaireId = responses[1].getResponse()
  Logger.log(`userId:${userId}`);
  Logger.log(`questionnaireId:${questionnaireId}`);

  if (!isUUID(userId) || !isUUID(questionnaireId)) {
    Logger.log('Invalid UUID format.');
    return;
  }
  const baseUrl = `https://example.com`;
  const endpoint = `${baseUrl}/v1/users/${userId}/questionnaire`;
  Logger.log(`endpoint: ${endpoint}`);

  var payload = {
    "questionnaire_id": questionnaireId,
  };
  var options = {
    "method": "post",
    "payload": JSON.stringify(payload),
    "headers": {
      "Content-Type": "application/json",
      "Accept": "application/json"
    },
    "muteHttpExceptions": true
  };
  var response = UrlFetchApp.fetch(endpoint, options);
  Logger.log(response.getContentText());
}

function isUUID(str) {
  const uuidPattern = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
  return uuidPattern.test(str);
}
javascript google-apps-script urlfetch

评论

0赞 Tanaike 10/30/2023
关于 ,在您的情况下,当您直接向 API 请求而不使用 OnSubmit 触发器时,您会得到相同的结果吗?因为我担心事件对象的值可能是您当前问题的原因。When executing UrlFetchApp, sometimes it succeeds with 200 and sometimes it fails with 403, and I would like to know why 403 is generated.e
0赞 Tanaike 10/30/2023
的值和 的值是否始终有效?例如,当放在 的行之后时,你会得到什么结果?但是,我不确定你的实际情况。所以,如果我误解了你当前问题的原因,我深表歉意。userIdquestionnaireIdif (!userId || !questionnaireId) return;const questionnaireId = responses[1].getResponse()
0赞 Ken Yurino 10/30/2023
谢谢你的评论。我已经在运行时检查了日志,并且 和 显示正确,所以我认为 和 没有问题。userIdquestionnaireIderesponses[1].getResponse()
0赞 Tanaike 10/30/2023
感谢您的回复。从您的回复中,并且是有效值。我的理解正确吗?如果我的理解是正确的,当您在不使用 OnSubmit 触发器的情况下直接多次请求 API 时,您是否获得了相同的结果?endpointpayload
0赞 Ken Yurino 10/30/2023
我尝试直接使用 and 运行它,但结果是一样的:200 或 403。questionnaireIduserId

答:

0赞 Ken Yurino 11/1/2023 #1

自行解决。 我们使用 AWS 来构建我们的 API,当我从 WAF 规则中删除时,403 错误不再发生。 也许 Google 正在使用的 IP 之一正在被阻止。AWSManagedRulesAnonymousIpList

评论

0赞 Community 11/1/2023
您的答案可以通过其他支持信息进行改进。请编辑以添加更多详细信息,例如引文或文档,以便其他人可以确认您的答案是正确的。您可以在帮助中心找到有关如何写出好答案的更多信息。