有没有办法增加API速率限制或完全绕过它GitHub?

时间:2012-11-15 08:51:00

标签: github

我正在开发一个需要向GitHub发送大量HTTP请求的Web应用程序。在n次成功请求之后,我会收到HTTP 403: Forbidden消息API Rate Limit Exceeded

有没有办法增加API速率限制或完全绕过GitHub?

6 个答案:

答案 0 :(得分:7)

解决方案:添加身份验证详细信息或客户端ID和密码(在GitHub上register your application时生成)。

找到详细信息herehere

“如果您需要进行未经身份验证的呼叫但需要使用与OAuth应用程序关联的更高速率限制,则可以通过查询字符串中的客户端ID和密码发送”

答案 1 :(得分:7)

为了提高API速率限制,您可能

有多种方法可以做到这一点:

<强> Basic Auth + OAuth2Token

curl -u <token>:x-oauth-basic https://api.github.com/user

<强> Set and Send OAuth2Token in Header

curl -H "Authorization: token OAUTH-TOKEN" https://api.github.com

<强> Set and Send OAuth2Token as URL Parameter

curl https://api.github.com/?access_token=OAUTH-TOKEN

<强> Set Key & Secret for Server-2-Server communication

curl 'https://api.github.com/users/whatever?client_id=xxxx&client_secret=yyyy'

答案 2 :(得分:7)

这是一个相对解决方案,因为限制仍然是每分钟5000个API调用, 或者每秒约70次,实际上并没有那么多。

我正在编写一个工具来比较组织中的350多个存储库 找到他们的相关性。 好的,该工具使用python进行git / github访问,但我认为 这不是相关点,这里。

经过一些初步的成功,我发现了GitHub API的功能 如果你真的想问,那么在通话次数和带宽方面都太有限了 回购有很多深层次的问题。

因此,我使用不同的方法改变了这个概念:

我没有使用GitHub API做任何事情,而是写了一个GitHub镜像脚本 能够在不到15分钟的时间内使用我的镜像来反映所有这些回购 通过pygit2并行python脚本。

然后,我使用本地存储库和pygit2编写了所有可能的内容。 这个解决方案变得快了100倍或更多,因为既没有API也没有带宽瓶颈。

当然,这确实需要额外的努力,因为pygit2 API相当多 与github3.py不同,我更喜欢GitHub解决方案部分。

这实际上是我的结论/建议: 处理大量Git数据的最有效方法是:

  • 克隆您感兴趣的所有回购,本地

  • 使用pygit2本地编写所有可能的内容

  • 写其他内容,例如公共/私人信息,拉取请求,访问权限 维基页面,问题等使用github3.py API或您喜欢的。

这样,您可以最大化您的吞吐量,而现在的限制是 你的课程质量。 (也是非平凡的)

答案 3 :(得分:1)

只需创建新的“个人访问令牌”here并使用简单的获取方法(如果您在JS中编码:D)并用您的令牌替换YOUR_ACCESS_TOKEN。

测试它的最佳方法是使用Postman

async function fetchGH() {
    const response = await fetch('https://api.github.com/repos/facebook/react/issues', {
        headers: {
            'Authorization': 'token YOUR_ACCESS_TOKEN',
        }
    })
    return await response.json()
}

答案 4 :(得分:1)

虽然似乎仍然没有办法提高速率限制,但 GitHub 现在有一个 GraphQL API,它可能允许您降低 API 调用。

请记住,GitHub 在 GraphQL 和 REST API 之间计算速率限制的方式不同。 GraphQL API 速率限制为 5000 点/小时(不是每小时 5000 次调用!因此 1 次 GraphQL 调用可能会花费您超过 1 点)您可以在此处阅读更多信息:https://docs.github.com/en/graphql/overview/resource-limitations(TL;DR 是在查询 = 更多积分)

例如,如果您有与 Christian 的回答类似的用例,而不是多次调用多个端点

GET /repos/{owner}/{repoA}
GET /repos/{owner}/{repoB}

您可以使用此查询对 https://api.github.com/graphql 进行一次 GraphQL 调用:

query {
  repoA: repository(owner:"owner", name:"repoA") {
    ...
  }
  repoB: repository(owner:"owner", name:"repoB") {
    ...
  }
}

根据存储库查询的内容,您仍然可以在一次调用中添加更多存储库,并且每次调用仍使用 1 点。

答案 5 :(得分:0)

我在詹金斯(Jenkins)的多支流水线配置过程中观察到此错误

我选择了源作为github。将其更改为git并传递guthub回购详细信息后,它开始工作。 (在jenkins中配置了git可执行文件路径,并设置了用于对github进行身份验证的凭据)