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

news2024/11/17 13:27:38

破除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 requests
    
    def get_github_user(username):
        # 替换为上一步生成的有效token
        access_token = "xxxxxxxxxxxxxxxxxxxxxxxxxxx"
    
        # 构建 API 请求的 URL
        api_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 ThreadPoolExecutor

def get_github_user(username):
    access_token = random.choice(token_lst)
    # 构建 API 请求的 URL
    api_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.coloradmin.cn/o/1435611.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

opencv0014 索贝尔(sobel)算子

前面学习的滤波器主要是用来模糊图像,今天一起来了解关于边缘识别的滤波吧!嘿嘿 边缘 边缘是像素值发生跃迁的位置,是图像的显著特征之一,在图像特征提取,对象检测,模式识别等方面都有重要的作用。 人眼如…

大数据企业应用场景分析

目录 一、企业分析 1.1 企业领域维度分析 1.2 技术服务型维度分析 1.3 细分领域维度分析 二、大数据应用场景 2.1 数据分析 2.2 智能推荐 2.3 产品/流程优化 2.4 异常监测 2.5 智能管理 2.6 人工智能和机器学习 三、总结 前言:想讲清楚大数据应用对企业…

爬虫(三)

1.JS逆向实战破解X-Bogus值 X-Bogus:以DFS开头,总长28位 答案是X-Bogus,因为会把负载里面所有的值打包生成X-Boogus 1.1 找X-Bogus加密位置(请求堆栈) 1.1.1 绝招加高级断点(日志断点) 日志断点看有没有X-B值 日志…

【C#】MVVM架构

示例结果展示 前提了解 MVVM是Model-View-ViewModel的缩写形式,它通常被用于WPF或Silverlight开发。 Model——可以理解为带有字段,属性的类。例如学校类,教师类,学生类等 View——可以理解为我们所看到的UI。前端界面。 View Model在View和Model之间,起到连接的作用,…

【翻译】Processing安卓模式的安装使用及打包发布(内含中文版截图)

原文链接在下面的每一章的最前面。 原文有三篇,译者不知道贴哪篇了,这篇干脆标了原创。。 译者声明:本文原文来自于GNU协议支持下的项目,具备开源二改授权,可翻译后公开。 文章目录 Install(安装&#xff0…

中国学者用CHARLS数据库做横断面研究发表二区文章 IF=6.6!

欢迎报名2024年郑老师团队课程课程! 郑老师科研统计培训,包括临床数据、公共数据分析课程,欢迎报名 2024年1月,中国学者在《Journal of Affective Disorders》(二区,IF6.6)发表题为:…

[职场] 参与秋招前你一定要知道的几件事(终篇) #其他#职场发展

参与秋招前你一定要知道的几件事(终篇) 39、请不要在爱好类目里填写“喜欢加班”,只会对hr形成10000暴击的同时会让hr产生一种不可信的印象。 40、简历命名很重要!请务必按照既定的格式来撰写。HR在筛选时一定会有关键词&#xff…

【Docker】.NET Core 6.0 webapi 发布上传到Docker Desktop并启动运行访问,接口返回数据乱码解决方法

欢迎来到《小5讲堂》,大家好,我是全栈小5。 这是《Docker容器》系列文章,每篇文章将以博主理解的角度展开讲解, 特别是针对知识点的概念进行叙说,大部分文章将会对这些概念进行实际例子验证,以此达到加深对…

HCIP-Datacom(H12-821)101-110题解析

有需要完整题库的同学可以私信博主,博主看到会回复将文件发给你!(麻烦各位同学给博主推文点赞关注和收藏哦) 101、关于告警信单选息"OSPF/2/IFAUTFAIL(OID) [1.3.6.1.2.1.14.16.2.6]:A packet is received on anon-virtual …

幻兽帕鲁PalWorld服务器2024年配置选择

幻兽帕鲁PalWorld是一款备受期待的虚拟游戏,其独特的幻兽系统和丰富的世界观吸引了大量玩家。然而,随着游戏日益受到关注,服务器的配置选择成为了关键问题。2024年,随着技术不断发展,玩家对于游戏体验的需求也在不断提…

立足智能存取解决方案|HEGERLS智能托盘四向车储存制动能量 实现能源回收

对于商业配送和工业生产的企业而言,如何能高效率、低成本进行低分拣、运输、码垛、入库,用以提升仓库空间的利用效率,是现在大多企业急需要解决的行业痛点。对此,为了解决上述痛点,近年来,物流仓储集成商、…

Android9~Android13 某些容量SD卡被格式化为内部存储时容量显示错误问题的研究与解决方案

声明:原创文章,禁止转载! Android9~Android13 某些容量SD卡被格式化为内部存储时容量显示错误问题的研究与解决方案 分析Android11 系统对于EMMC/UFS作为内部存储、SD卡被格式化为内部存储、SD卡/U盘被格式化为便携式存储的不同处理 一.现象描述 实测Android9 Android10 A…

C++:深入剖析默认参数

看下列代码执行结果&#xff0c;你猜一猜会输出什么&#xff1f; #include<iostream> using namespace std; struct A {virtual void fun(int a 10) {cout << "A,a"<<a;} }; struct B :public A {void fun(int a 5) {cout <<"B,a&qu…

极狐GitLab 使用阿里云作为 OmniAuth 身份验证 provider

使用阿里云作为 OmniAuth 身份验证 provider 您可以启用阿里云 OAuth 2.0 OmniAuth provider并使用您的阿里云账户登录极狐GitLab。 创建阿里云应用 登录阿里云平台&#xff0c;在上面创建一个应用。阿里云会生成一个 client ID and secret key 供您使用。 登录到阿里云平台…

我的世界Java版服务器如何搭建并实现与好友远程联机Minecarft教程

文章目录 1. 安装JAVA2. MCSManager安装3.局域网访问MCSM4.创建我的世界服务器5.局域网联机测试6.安装cpolar内网穿透7. 配置公网访问地址8.远程联机测试9. 配置固定远程联机端口地址9.1 保留一个固定tcp地址9.2 配置固定公网TCP地址9.3 使用固定公网地址远程联机 本教程主要介…

多模态对比语言图像预训练CLIP:打破语言与视觉的界限,具备零样本能力

多模态对比语言图像预训练CLIP:打破语言与视觉的界限,具备零样本能力。 一种基于多模态(图像、文本)对比训练的神经网络。它可以在给定图像的情况下,使用自然语言来预测最相关的文本片段,而无需为特定任务进行优化。CLIP的设计类似于GPT-2和GPT-3,具备出色的零射击能力…

【LeetCode: 73. 矩阵置零 + 矩阵】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

嵌入式软件bug分析基本要求

摘要&#xff1a;软件从来不是一次就能完美的&#xff0c;需要以包容的眼光看待它的残缺。那问题究竟为何产生&#xff0c;如何去除呢&#xff1f; 1、软件问题从哪来 软件缺陷问题千千万万&#xff0c;主要是需求、实现、和运行环境三方面。 1.1 需求描述偏差 客户角度的描…

数据结构高级算法

目录 最小生成树 Kruskal(克鲁斯卡尔)(以边为核心) 9) 不相交集合(并查集合) 基础 Union By Size 图-相关题目 4.2 Greedy Algorithm 1) 贪心例子 Dijkstra Prim Kruskal 最优解(零钱兑换)- 穷举法 Leetcode 322 最优解(零钱兑换)- 贪心法 Leetcode 322 3)…

XUbuntu22.04之两款实用画笔工具(二百一十)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…