【问题标题】:Why is Google Apps Script giving me this UrlFetchApp script code 429?为什么 Google Apps 脚本会给我这个 UrlFetchApp 脚本代码 429?
【发布时间】:2021-09-13 13:28:58
【问题描述】:

我一直在试图找出一个奇怪的错误。 我决定学习一些 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)
}

有人可以帮忙吗?我现在真的很沮丧。

【问题讨论】:

  • 服务器似乎因为太多请求而阻止了您。在我的电脑和手机中,您的代码可以完美运行。我会尝试使用VPN,看看有什么不同。

标签: google-apps-script urlfetch


【解决方案1】:

响应状态代码 429 显示用户在给定时间内发送过多请求的时间。根据Rate Limiting in Guild Wars 的文档,速率限制是按 IP 跟踪的,每分钟的最大请求数为 600。

在您的脚本中,您可以通过使用response.getAllHeaders()response.getHeaders() 打印标题来确认速率限制,您将看到x-rate-limit-limit=600

X-Rate-Limit-Limit 是最大请求数 一分钟内发出。这是一个不包含计数的静态值 对于您已经发送的请求。

通常,429 状态码包含 Retry-After 标头。这表示用户在发出新请求之前必须等待多长时间。您也可以通过打印页眉来查看。

如果 Retry-After 未包含在标头中,您可以按照上面的 Elchanan shuky Shukrun 评论使用 VPN,因为每个 IP 都会跟踪速率限制。您还可以使用Guild Wars forum 并针对可能存在的错误创建帖子。

参考:

【讨论】:

    猜你喜欢
    • 2011-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多