google-apps-script - 为什么 Google Apps 脚本会给我这个 UrlFetchApp 脚本代码 429?
问题描述
我一直在试图找出一个奇怪的错误。我决定学习一些 JavaScript/google 应用程序脚本来从我玩的游戏的 api 中解析一些信息。我遵循了一堆教程,并在谷歌和 Stack Overflow 上搜索了解决方案,但都没有奏效。我想我已经把它缩小到一种特定的方法:“UrlFetchApp”。
现在我只是试图从 API 中获取一些 JSON 数据并将其显示在日志窗口中。
我不断得到这个:
[21-09-13 09:01:40:770 EDT] Exception: Request failed for https://api.guildwars2.com returned code 429. Truncated server response: {"text":"too many requests"} (use muteHttpExceptions option to examine full response)
at getRequest(Untitled:4:30)
现在这是奇怪的部分,我在工作时从手机上运行了脚本来测试一些理论并得到了这个:
[21-09-13 09:02:20:943 EDT] {
"name": "Abomination Hammer",
"type": "Weapon",
"level": 0,
"rarity": "Fine",
"vendor_value": 0,
"default_skin": 5014,
"game_types": [
"Activity",
"Wvw",
"Dungeon",
"Pve"
],
"flags": [
"NoSell",
"SoulbindOnAcquire",
"SoulBindOnUse"
],
"restrictions": [],
"id": 15,
"chat_link": "[&AgEPAAAA]",
"icon": "https://render.guildwars2.com/file/E8507FFB6CF3C9094A69956344CEDBD9B47D95B6/434872.png",
"details": {
"type": "Hammer",
"damage_type": "Physical",
"min_power": 146,
"max_power": 165,
"defense": 0,
"infusion_slots": [],
"attribute_adjustment": 20.736,
"infix_upgrade": {
"id": 112,
"attributes": []
},
"secondary_suffix_item_id": ""
}
}
我怀疑这是现在的代码。那是应该返回的。这是相同的代码,未经编辑,在我的手机和电脑上运行了多次,结果总是一样的。
这是我写的代码行:
function getRequest() {
var response = UrlFetchApp.fetch('https://api.guildwars2.com/v2/items/15');
Logger.log(response)
}
任何人都可以帮忙吗?我现在真的很沮丧。
解决方案
响应状态代码429显示用户在给定时间内发送过多请求的时间。根据激战中速率限制的文档,速率限制是按 IP 跟踪的,每分钟的最大请求数为 600。
在您的脚本中,您可以通过使用response.getAllHeaders()
or打印标题来确认速率限制response.getHeaders()
,您将看到x-rate-limit-limit=600
.
X-Rate-Limit-Limit 是一分钟内可以发出的最大请求数。这是一个静态值,不包含您已经发送的请求的计数。
通常,429状态码包含Retry-After标头。这表示用户在发出新请求之前必须等待多长时间。您也可以通过打印标题来查看。
如果标头中未包含Retry-After ,您可以按照上面的 Elchanan shuky Shukrun 评论使用 VPN,因为每个 IP 都会跟踪速率限制。您还可以使用激战论坛并为可能的错误创建帖子。
参考:
推荐阅读
- docker - 为另一个容器中的数据库运行数据迁移脚本专门设置一个 docker 容器是正确的做法吗?
- python - 当我使用 HttpResponseRedirect 我得到 TypeError: quote_from_bytes() expected bytes in Django
- json - 带有命令条的 Postgres COPY 从 JSON 文件中转义(还将每行加载为单独的行)
- java - 哪个消息队列允许查看一批消息的进度?
- javascript - 如何在某些索引处删除带有按钮的列表项 HTML 和 JS
- javascript - 这是在 Node.js 中将字符串转换为对象的最佳方法吗?
- php - 如何返回在条件中评估的变量的名称
- c# - 如何使用 Unicode 从字符串中拆分数据?
- android - 在本机中构建失败
- java - Ubuntu中不可解析的父POM