练习:API auth — 去 github.com/settings/tokens 产生一个 personal access token(给最少权限:read:user)
- 用 REST API:发 GET/POST、解析 JSON、处理 auth header
- 练习:API auth — 去 github.com/settings/tokens 产生一个 personal access token(给最少权限:read:user),调用 https://api.github.com/user 需 auth 的 endpoint,看 401(无 token)vs 200(带 token)的差别。注意:production agent 一定会用到 API auth,所以这一题要做
把这个练习想象成 “去政府大楼办事”:
-
没有 Token = 你没带身份证,保安拦住你不让进(返回 401)。
-
有 Token = 你出示了身份证,保安验证通过,让你进去办事(返回 200,并拿到你的个人信息)。
下面我带你手把手完成这个练习,每一步都讲清楚。
🪪 第一步:去 GitHub “办证”(生成 Token)
注意:这个操作是在 网页上 完成的,不是在命令行。
-
登录 GitHub 后,点击右上角你的 头像 → Settings(设置)。
-
在左侧菜单最下面,找到 Developer settings(开发者设置)并点击。
-
点击左侧的 Personal access tokens → Tokens (classic)(经典令牌)。
-
点击右上角的 Generate new token (classic)(生成新令牌)。
-
Note(备注):随便填,比如
my-test-token。 -
Expiration(过期时间):选
30 days(30天)就够了。 -
Scopes(权限):只勾选一个
read:user(这表示“只允许读取我的公开用户信息”,是最小权限)。 -
拉到页面最下面,点击 Generate token(生成令牌)。
-
🔴 最关键的一步:页面上会显示一串以
ghp_开头的乱码(比如ghp_abc123XYZ...),立刻复制它,粘贴到一个记事本里保存好。一旦关掉这个页面,你就再也看不到它了!
🐍 第二步:写 Python 代码(对比“没带证”和“带了证”)
在你的练习文件夹(F:\AI_qc\AIstudy\)里新建一个 Python 文件,比如叫 auth_test.py。
把下面的代码完整复制进去,只需要替换第 6 行的 YOUR_TOKEN_HERE 为你刚刚复制的 Token。
python
import requests
import json
# ---------- 配置 ----------
# 👇 把下面改成你的真实 Token(以 ghp_ 开头的那串)
TOKEN = "YOUR_TOKEN_HERE"
URL = "https://api.github.com/user" # 这个接口必须登录才能看
# -------------------------
# 由于你的电脑有 SSL 证书问题,我们加上 verify=False 跳过检查(仅学习用)
import urllib3
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
print("=" * 60)
print("🚫 场景1:没带 Token(相当于没带身份证)")
print("=" * 60)
# 1. 发送不带 Token 的请求
resp_no_auth = requests.get(URL, verify=False)
print(f"返回的状态码: {resp_no_auth.status_code}") # 一定是 401
print("服务器说:")
# 格式化打印 JSON,让小白看得更清楚
error_data = resp_no_auth.json()
print(json.dumps(error_data, indent=2, ensure_ascii=False))
print("\n" + "=" * 60)
print("✅ 场景2:带了 Token(相当于出示身份证)")
print("=" * 60)
# 2. 发送带 Token 的请求(把 Token 放进请求头里)
headers = {
"Authorization": f"Bearer {TOKEN}", # 固定格式:Bearer + 空格 + Token
"Accept": "application/vnd.github+json",
"User-Agent": "MyLearningApp"
}
resp_with_auth = requests.get(URL, headers=headers, verify=False)
print(f"返回的状态码: {resp_with_auth.status_code}") # 应该是 200
if resp_with_auth.status_code == 200:
user_data = resp_with_auth.json()
print("✅ 认证成功!服务器返回了你的个人信息:")
print(f" - 你的 GitHub 登录名: {user_data.get('login')}")
print(f" - 你的用户 ID: {user_data.get('id')}")
print(f" - 你的姓名: {user_data.get('name') or '未设置'}")
print(f" - 你的公开仓库数量: {user_data.get('public_repos')}")
else:
print("❌ 还是失败了,检查一下 Token 是不是复制错了?")
print("错误信息:", resp_with_auth.text)
▶️ 第三步:运行代码,看结果
在终端(PowerShell)里,切换到你的文件夹并运行:
powershell
cd F:\AI_qc\AIstudy python auth_test.py
📊 第四步:对比输出(你会看到什么)
场景1(没带 Token)的输出:
json
{
"message": "Requires authentication",
"documentation_url": "https://docs.github.com/rest/overview/resources-in-the-rest-api#authentication"
}
-
状态码 401(Unauthorized):服务器翻译:“我不认识你,请出示凭证。”
-
没有任何用户数据返回。
场景2(带了 Token)的输出:
text
返回的状态码: 200 ✅ 认证成功!服务器返回了你的个人信息: - 你的 GitHub 登录名: Ggx-glitch - 你的用户 ID: 12345678 - 你的姓名: 未设置 - 你的公开仓库数量: 5
-
状态码 200(OK):服务器翻译:“验证通过,这是你要的数据。”
-
服务器准确地返回了你这个用户的详细信息。

💡 用小白的话总结原理
| 对比项 | 不带 Token(401) | 带 Token(200) |
|---|---|---|
| 相当于 | 没带身份证去办事 | 带了身份证去办事 |
| 服务器反应 | “你谁啊?不给进!” | “哦,是你啊,请进!” |
| 能拿到数据吗 | ❌ 不能 | ✅ 能(自己的信息) |
生产环境(真实项目)中,几乎所有涉及隐私或修改数据的操作(比如发帖子、改密码、删仓库),都必须带 Token。 这个练习就是为了让你亲眼看一眼“不带 Token 被拒绝”和“带 Token 被放行”的区别。
⚠️ 如果你运行时报错了怎么办?
-
报错
Bad credentials:说明 Token 复制漏了字符,或者多复制了空格。回去重新生成一个,粘贴时注意前后不要有空格。 -
报错
SSLError:别怕,代码里已经加了verify=False,应该不会报这个错了。如果还报,把错误截图发我。 -
报错
JSONDecodeError:可能是网络问题返回了空内容,重新运行一次试试。
现在去试试吧!当你亲眼看到 401 和 200 的差别时,你对 API 认证的理解就真正入门了。加油!💪😊
更多推荐




所有评论(0)