Есть ли способ увеличить ограничение скорости API или полностью обойти его для GitHub?

Я разрабатываю веб-приложение, которое должно отправлять много HTTP-запросов на GitHub. После n количество успешных запросов, я получаю HTTP 403: Forbidden с .

есть ли способ увеличить ограничение скорости API или полностью обойти его для GitHub?

4 ответов


это относительное решение, потому что предел все еще 5000 вызовов API в минуту, или ~70 звонков в секунду, что на самом деле не так много.

Я пишу инструмент для сравнения более 350 хранилищ в организации и найти их корреляции. Хорошо, инструмент использует python для доступа git/github, но я думаю здесь это не имеет значения.

после некоторого первоначального успеха я узнал, что возможности API GitHub слишком ограничены в # вызовов и также в пропускной способности, если вы действительно хотите задать в репо много глубоких вопросов.

поэтому я переключил концепцию, используя другой подход:

вместо того, чтобы делать все с API GitHub, я написал зеркальный скрипт GitHub это может отразить все эти РЕПО менее чем за 15 минут, используя мой параллельный скрипт python через pygit2.

затем я написал все возможное, используя локальные репозитории и pygit2. Это решение стало быстрее коэффициент 100 или более, потому что не было ни API, ни горлышка бутылки с пропускной способностью.

конечно, это стоило дополнительных усилий, потому что API pygit2 довольно немного отличающийся от github3.py что я предпочел для части решения GitHub.

и это на самом деле мой вывод/совет: Самый эффективный способ работы с большим количеством данных Git:

  • клонировать все репо, которые вас интересуют, локально

  • пишите все возможное с помощью pygit2, локально

  • напишите другие вещи, как публичная / частная информация, запросы тяги, доступ к вики-страницы, проблемы и т. д. использование github3.py API или то, что вы предпочитаете.

таким образом, вы можете максимизировать пропускную способность, в то время как ваше ограничение сейчас качество вашей программы. (также нетривиально)


решение: добавьте данные аутентификации или идентификатор клиента и секрет (генерируется, когда вы зарегистрировать приложение на GitHub).

нашли детали здесь и здесь

"Если вам нужно сделать неавторизованные вызовы, но нужно использовать более высокий предел скорости, связанный с вашим приложением OAuth, вы можете отправить свой идентификатор клиента и секрет в строке запроса"


для того, чтобы увеличить ограничение скорости API вы могли бы

есть несколько способов сделать это:

Базовая Auth + 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

установить ключ и секрет для сервера-2-серверная связь

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


просто сделайте новый "личный токен доступа"здесь и используйте простой метод выборки (если вы кодируете в JS, конечно :D) и замените YOUR_ACCESS_TOKEN своим токеном.

лучший способ проверить это, чтобы использовать почтальон

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()
}