首页 > 解决方案 > 为什么 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)
}

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

标签: google-apps-scripturlfetch

解决方案


响应状态代码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 都会跟踪速率限制。您还可以使用激战论坛并为可能的错误创建帖子。

参考:


推荐阅读