破除Github API接口的访问次数限制

破除Github API接口的访问次数限制

  • 1、Github介绍
  • 2、Github API接口
    • 2.1 介绍
    • 2.2 使用方法
  • 3、Github API访问限制
    • 3.1 访问限制原因
    • 3.2 访问限制类别
  • 4、Github API访问限制破除
    • 4.1 限制破除原理
    • 4.2 限制破除示例

1、Github介绍

Github,是一个面向开源及私有软件项目的托管平台,也是全球最早且最大的项目代码托管平台,在无数代码人心中有着不可撼动的地位。Github只支持使用Git作为唯一的版本库控制托管,故名为Github。得助于Git强大的项目组织管理功能,全球范围内无数的企业用户也被吸引使用Github完成团队项目的协助工作。
在这里插入图片描述

截止2023年11月17日,Github在全球已有超过1亿的开发者用户(大多数来自于美国、中国、印度),超过90%的财富100强企业也选择使用Github。所有个人开发者用户与企业用户共同在Github上完成了约4.2亿个项目(包含2.84亿个开源项目)以及共计45亿次的开源贡献。

在这里插入图片描述

2、Github API接口

2.1 介绍

在 GitHub 汇聚了庞大的开源项目数据基础之上,该平台为开发者和研究者提供了丰富的研究素材。为了更好地协助 GitHub 用户访问和有效组织这些数据,GitHub 提供了公开的 API(Application Programming Interface) 接口,用以调用其平台资源。通过Github API,Github平台上公开的海量的数据得以轻松获取,这对爬虫、搜索、推荐系统与代码漏洞检测等方面的研究带来的极大的便利与促进作用。

GitHub API采用RESTful风格的设计,允许开发者通过 HTTP 请求访问 GitHub 上的各种资源,如仓库(Repositories)、用户(Users)、问题(Issues)、分支(Branches)等。通过 GitHub API,用户能够实现从查看存储库信息到管理问题, 以及提交、合并请求等各种操作。

2.2 使用方法

  1. 创建一个Github账户,并获取认证信息

    大多数 GitHub API 操作都需要进行身份验证,我们可以申请API Key (或者称为token凭证)进行身份验证。生成 API Key的步骤可以在 GitHub 平台里的个人设置中完成。
    在这里插入图片描述

    进入个人设置页面后,点击左侧侧边栏的Developers Settings选项,配置Github API Key。
    在这里插入图片描述

    Github身份认证支持authtoken两种验证方式,其中auth为授权码认证方式,其原理可参考这篇博客:第三方登陆auth(github),token为凭证认证方式,我们这里通过token方式进行认证。

    先点击左边侧栏的Token(classic), 然后点击右边弹出页面的Generate new token按钮,生成一个新的token。
    在这里插入图片描述
    之后设置token名称(Note)到期时间(Expiration)可访问的权限范围(Select scopes),然后点击Generate token生成即可。
    在这里插入图片描述
    下图中token即为绿色标注的区域(由于隐私性,本文生成的token加了马赛克)。
    在这里插入图片描述

  2. 使用API Key发起API请求

    有了API Key后,就能够以最大限度地访问Github API了。本文给出一个使用Python语言访问Github API接口的实例。

    首先,确保已经安装了requests库:

    pip install requests
    

    然后,使用以下的Python代码。 以下代码给出了通过requests向Github API发送Get请求,获取指定Github用户名、用户ID与粉丝数的实现逻辑:

    import requestsdef get_github_user(username):# 替换为上一步生成的有效tokenaccess_token = "xxxxxxxxxxxxxxxxxxxxxxxxxxx"# 构建 API 请求的 URLapi_url = f"https://api.github.com/users/{username}"# 构建请求头,包括认证信息headers = {"Authorization": f"Bearer {access_token}","Accept": "application/json"  # 指定响应数据格式为 JSON}# 发送 GET 请求response = requests.get(api_url, headers=headers)# 检查响应状态码if response.status_code == 200:# 解析 JSON 响应user_data = response.json()# 打印用户信息print(f"GitHub 用户名: {user_data['login']}")print(f"用户ID: {user_data['id']}")print(f"粉丝数: {user_data['followers']}")else:print(f"请求失败,状态码: {response.status_code}")print(f"错误信息: {response.text}")# 替换为你要查询的 GitHub 用户名
    get_github_user("YuDongPan")
    

    运行后将得到以下结果:
    在这里插入图片描述

3、Github API访问限制

3.1 访问限制原因

在Github REST API Documentation中,详细介绍了Github API的使用方式、使用规范、使用案例与应用场景。此外,文档中还谈及了GitHub将限制用户在特定时间内可以发出的REST API请求的数量。此限制有助于防止滥用和拒绝服务攻击,并确保API对所有用户仍然可用。

3.2 访问限制类别

通常,Github根据身份验证方法计算REST API的主要速率限制,如下所述:

  • 未认证用户 (unauthenticated users):
    如果仅提取公共数据,则可以发出未经身份验证的API请求。未经身份验证的API请求与发起者的IP地址相关联,而不是与发出请求的用户或应用程序相关联。

    未经身份验证的请求的主要速率限制为每小时60个请求

  • 认证用户 (authenticated users):
    认证用户可以使用个人访问令牌来发出API请求。此外,认证用户可以授权GitHub应用程序或OAuth应用程序,然后它们可以代表认证用户发出API请求。

    普通情况下,认证用户每小时5000次请求的速率限制GitHub企业云组织拥有的GitHub应用程序请求的速率限制更高,为每小时15000个请求。同样,如果认证用户是GitHub Enterprise Cloud组织的成员,则由GitHub企业云组织拥有或批准的OAuth应用程序代表您提出的请求的速率限制更高,为每小时15000个请求。

  • Github APP安装 (Github APP installation):
    使用安装访问token进行身份验证的GitHub应用程序使用安装的最低速率限制,即每小时5000个请求。如果安装在GitHub企业云组织上,则安装的速率限制为每小时15000个请求。

    对于不在GitHub企业云组织上的安装,安装速率限制将随着用户和存储库的数量而变化。具有20个以上存储库的安装每小时会收到另外50个请求。在一个拥有20个以上用户的组织中安装,每个用户每小时还会收到50个请求。速率限制不能超过每小时12500个请求。

    GitHub应用程序用户访问token的主要速率限制由经过身份验证的用户的主要速率限值决定。此速率限制与另一个GitHub应用程序或OAuth应用程序代表该用户发出的任何请求以及该用户使用个人访问令牌发出的任何要求相结合。

4、Github API访问限制破除

4.1 限制破除原理

从Github API的访问限制类别中可以看出,未经认证的用户每小时可访问的次数最少,为60次;经认证的用户每小时可访问次数为5000次;作为Github企业云组织的应用程序每小时的访问次数则可以高达15000次。

考虑到大部分开发者并非Github企业云组织成员,故按照官方标准一个普通开发者经身份认证后最高可达到5000次/小时的访问速率。

但是,值得注意的是,一个开发者经身份认证后每小时可以访问5000次API接口,并不意味着一个应用程序的整个运行周期内就只能使用一个开发者的认证信息!!!

因此,如果我们在应用程序里头同时穿插使用多个开发者的身份认证信息(如token认证),即可完美破除Github API的访问限制

从而,破除Github API访问限制的关键,转化为了计算我们的应用程序每个小时需访问多少次Github API接口,对应于我们需要为应用程序准备多少个Github用户身份认证信息(token)。

例如,倘若我们开发的应用程序是一个爬虫程序,用于爬取Github的用户信息。爬虫程序在使用了多线程后,每小时需要访问13865次的Github
API接口,那么我们则需要准备 ⌈ 13865 ÷ 5000 ⌉ \lceil 13865÷5000 \rceil 13865÷5000=3个Github用户的token凭证。

4.2 限制破除示例

根据这一逻辑,我们给出以下的Python代码示例:

import requests
import random
from concurrent.futures import ThreadPoolExecutordef get_github_user(username):access_token = random.choice(token_lst)# 构建 API 请求的 URLapi_url = f"https://api.github.com/users/{username}"# 构建请求头,包括认证信息headers = {"Authorization": f"Bearer {access_token}","Accept": "application/json"  # 指定响应数据格式为 JSON}# 发送 GET 请求response = requests.get(api_url, headers=headers)# 检查响应状态码if response.status_code == 200:# 解析 JSON 响应user_data = response.json()# 打印用户信息print(f"GitHub 用户名: {user_data['login']}")print(f"用户ID: {user_data['id']}")print(f"粉丝数: {user_data['followers']}")else:print(f"请求失败,状态码: {response.status_code}")print(f"错误信息: {response.text}")# 构建一个token列表, 代表多个Github用户的token凭证
token_lst = ['xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx','xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
]# 假设构建一个含有8888个用户名的列表
username_lst = []
for i in range(8888):username_lst.append("YuDongPan")# 使用ThreadPoolExecutor创建线程池,控制并发数量
with ThreadPoolExecutor(max_workers=10) as executor:# 将每个用户名提交给线程池中的线程进行获取用户信息executor.map(get_github_user, username_lst)

在这个示例中,我们试图通过多线程机制在短时间内(一小时内)完成8888条Github API请求,获取指定Github用户名、用户ID与粉丝数。由于单个Github用户每个小时在使用token凭证后可访问5000次API,那么我们需要准备 ⌈ 8888 ÷ 5000 ⌉ \lceil 8888÷5000 \rceil 8888÷5000=2个Github用户的token凭证,装入token列表中。

在每次访问Github API接口时,我们通过random.choice()函数随机中token列表中选取一个Github用户的token凭证即可。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/457438.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2.6:冒泡、简选、直插、快排,递归,宏

1.冒泡排序、简单选择排序、直接插入排序、快速排序(升序) 程序代码&#xff1a; 1 #include<stdio.h>2 #include<string.h>3 #include<stdlib.h>4 void Bubble(int arr[],int len);5 void simple_sort(int arr[],int len);6 void insert_sort(int arr[],in…

(十三)springboot实战——springboot前后端分离方式项目集成spring securtity安全框架

前言 Spring Security 是一款强大且高度可定制的认证和访问控制框架&#xff0c;它是为了保护基于Spring的应用程序提供安全性支持。Spring Security提供了全面的安全服务&#xff0c;主要针对企业级应用程序的需求。其核心组件主要包含&#xff1a;Authentication&#xff08…

STM32Cubmax DAC 采集

一、概念 DMA&#xff0c;全称为&#xff1a; Direct Memory Access&#xff0c;即直接存储器访问&#xff0c; DMA 传输将数据从一个 地址空间复制到另外一个地址空间。 当 CPU 初始化这个传输动作&#xff0c;传输动作本身是由 DMA 控制器 来实行和完成。典型的例子就是移动…

从零开始手写mmo游戏从框架到爆炸(一)— 开发环境

一、创建项目 1、首先创建一个maven项目&#xff0c;pom文件如下&#xff1a; <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.0…

C++ 位图布隆过滤器哈希切割

文章目录 位图概念模拟实现海量数据面试题1 布隆过滤器模拟实现应用场景海量数据面试题2 哈希切割海量数据面试题3 位图 概念 我们用一道题引出此概念&#xff1a; 给40亿个不重复的无符号整数&#xff0c;没排过序。给一个无符号整数&#xff0c;如何快速判断一个数是否在这…

kettle spoon创建带参数定时任务并关闭它

文章目录 ETL是什么下载安装kettle和mysql8资源下载 数据库连接方式已定义的数据库类型进行连接Generic Database方式连接JNDI方式 运行方式使用案例教程定时job执行增量插入转换新建转换新建定时任务job关闭定时任务job 命令行运行定时任务job命令行执行任务后台运行脚本文件设…

位运算:进制

4982. 进制 - AcWing题库 给定两个整数 a,b 请你计算&#xff0c;在 [a,b] 范围内有多少个整数满足其二进制表示恰好有一个 0。 不考虑前导 0。 例如&#xff0c;当 a5,b10 时&#xff0c;[5,10]范围内的所有整数及其二进制表示如下&#xff1a; 可以看出&#xff0c;只有 5 和…

阿里云服务器centos_7_9_x64位,3台,搭建k8s集群

目录 1.环境信息 2.搭建过程 2.1 安装Docker源 2.2 安装Docker 2.3 安装kubeadm&#xff0c;kubelet和kubectl 2.4 部署Kubernetes Master(node1) 2.5 安装Pod网络插件&#xff08;CNI&#xff09; 2.6 加入Kubernetes Node 2.7 测试kubernetes集群 3.部署 Dashboard…

【Vitis】基于C++函数开发组件的步骤

目录 基本步骤 关键领域 • 硬件接口&#xff1a; 任务级并行度&#xff1a; 存储器架构&#xff1a; 微观级别的最优化&#xff1a; 基本步骤 1. 基于 设计原则 建立算法架构。 2. &#xff08;C 语言仿真&#xff09; 利用 C/C 语言测试激励文件验证 C/C 代码的逻辑。…

硬件工程师大师之道-EMC设计与诊断整改笔记1

什么是EMC EMC实质指的是多种用电设备在同一空间里同时工作时能够遵守“和平共处”的“多边主义”所谓你好我好大家好。 EMC包含EMS与EMI两个部分。 EMS: 任何用电设备在工作时都能通过空间合或者通过与其他设备的连接线&#xff0c;接收到四周的电磁波或者干扰电压电流&#…

【JS逆向六】(上)逆向模拟生成某网站的【sig】和【payload】的值 仅供学习

逆向日期&#xff1a;2024.02.07 使用工具&#xff1a;Node.js 加密方法&#xff1a;未知 / md5标准库 文章全程已做去敏处理&#xff01;&#xff01;&#xff01; 【需要做的可联系我】 可使用AES进行解密处理&#xff08; 直接解密即可&#xff09;&#xff1a;在线AES加解…

2024智慧城市新纪元:引领未来,重塑都市生活

随着科技的飞速发展和数字化转型的不断深入&#xff0c;2024年智慧城市领域迎来了全新的发展格局。 这一年&#xff0c;智慧城市的建设更加注重人性化、可持续性和创新性&#xff0c;为城市居民带来了前所未有的便捷与舒适。以下将重点关注智慧城市的几个核心内容&#xff0c;…