我正在创建一个 API 来记录 Google 表单响应。
我已经在 GAS 中实现了以下代码,并在提交 Google 表单时使用 GAS 中的 UrlFetchApp 来运行 Endpoint。
执行UrlFetchApp时,有时成功,有时返回200,有时失败,返回403,我想知道为什么会生成403。 我正在使用 Google Form 和 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);
}
自我解决。 我们使用 AWS 构建 API,当我从 WAF 规则中删除
AWSManagedRulesAnonymousIpList
时,403 错误就不再发生。
也许 Google 使用的 IP 地址之一已被屏蔽。