26

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

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

4

7 回答 7

18

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

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

在一些初步成功之后,我发现 GitHub API 的功能在调用次数和带宽方面都太有限了,如果你真的想向 repos 提出很多深入的问题的话。

因此,我转换了概念,使用了不同的方法:

我没有使用 GitHub API 做任何事情,而是编写了一个 GitHub Mirror 脚本,该脚本能够使用我的并行 python 脚本通过 pygit2 在不到 15 分钟内镜像所有这些 repos。

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

当然,这确实需要付出额外的努力,因为 pygit2 API 与我在 GitHub 解决方案部分首选的 github3.py 有很大不同。

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

  • 在本地克隆您感兴趣的所有存储库

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

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

这样,您可以最大限度地提高吞吐量,而您的限制现在是程序的质量。(也很重要)

于 2016-03-14T23:23:51.217 回答
12

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

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

基本身份验证 + OAuth2Token

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

在标头中设置和发送 OAuth2Token

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

设置并发送 OAuth2Token 作为 URL 参数

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

为 Server-2-Server 通信设置 Key & Secret

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

于 2014-09-05T10:37:10.480 回答
9

解决方案:添加身份验证详细信息或客户端 ID 和密码(在 GitHub 上注册应用程序时生成)。

在此处此处找到详细信息

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

于 2012-11-15T10:40:42.350 回答
7

只需在此处创建新的“个人访问令牌”并使用简单的 fetch 方法(如果您当然是在 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()
}
于 2018-05-03T00:06:21.317 回答
2

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

请记住,GitHub 在 GraphQL 和 REST API 之间计算速率限制的方式不同。GraphQL API 速率限制为 5000 点/小时(不是每小时 5000 次调用!所以 1 次 GraphQL 调用可能会花费您超过 1 点)您可以在此处阅读更多信息:https ://docs.github.com/en/graphql/overview/资源限制(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 点。

于 2021-05-21T06:31:39.073 回答
1

我在詹金斯的多分支管道配置期间观察到了这个错误

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

于 2018-12-01T14:18:21.373 回答
0

我可以建议“成为存档者” https://github.com/github/site-policy/issues/56

顺便说一句,即使是“非存档者”也可以访问公共数据......

所有工具都在 github 上。

于 2021-10-09T12:04:02.123 回答