GitHub 在调用 3-4 搜索后阻止我的访问令牌 API

GitHub blocks my access token after calling 3-4 search API

我正在使用 PyCurl 调用 GitHub 搜索 API 并提取一些信息。这是调用 API.

的代码片段
from io import BytesIO
import pycurl

url = f"https://api.github.com/search/code?q=import%2Bkeras+size:1..100+language:python&page=1&per_page=100"
output = BytesIO()
request = pycurl.Curl()
request.setopt(pycurl.HTTPHEADER, [f'Authorization: token {access_token}'])
request.setopt(request.URL, url)
request.setopt(request.WRITEDATA, output)
request.perform()

问题是 GitHub 仅在 3-4 个请求后就阻止了我的访问令牌。但是在 GitHub 文档中,每小时 5000 个请求被称为请求数量的限制。 我正在使用 Python 3.8PyCurl 7.44.1。 您有解决此问题的想法吗?

“搜索 API 有一个自定义速率限制,独立于管理其余 REST API 的速率限制”

您可以这样查看您的速率限制状态:

curl \
  -H "Accept: application/vnd.github.v3+json" \
  https://api.github.com/rate_limit

GitHub 对搜索请求有不同的速率限制,因为它们比普通的 API 调用要贵得多。您可以在端点 https://api.github.com/rate_limit.

查询它们

但是,在您的情况下,您看到了二级速率限制,这意味着您正在做的事情看起来很可疑,因此您被阻止了。您可以找出原因的唯一方法是联系 GitHub 支持。

我要指出,最佳做法是使用唯一的标识 User-Agent header,这样您的流量就可以与其他流量区分开来。这可能对这里有帮助,也可能没有帮助,但 libcurl 是一个非常常见的 user-agent,并且由于会有相当多的人将其用于滥用目的,因此您的流量可能因此被自动化系统标记.

最终,我在每个 API 请求之间添加了 5 秒的睡眠,问题得到解决。

感谢您的贡献。