• 用 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)

注意:这个操作是在 网页上 完成的,不是在命令行。

  1. 登录 GitHub 后,点击右上角你的 头像 → Settings(设置)。

  2. 在左侧菜单最下面,找到 Developer settings(开发者设置)并点击。

  3. 点击左侧的 Personal access tokens → Tokens (classic)(经典令牌)。

  4. 点击右上角的 Generate new token (classic)(生成新令牌)。

  5. Note(备注):随便填,比如 my-test-token

  6. Expiration(过期时间):选 30 days(30天)就够了。

  7. Scopes(权限)只勾选一个 read:user(这表示“只允许读取我的公开用户信息”,是最小权限)。

  8. 拉到页面最下面,点击 Generate token(生成令牌)。

  9. 🔴 最关键的一步:页面上会显示一串以 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 被放行”的区别。


⚠️ 如果你运行时报错了怎么办?

  1. 报错 Bad credentials:说明 Token 复制漏了字符,或者多复制了空格。回去重新生成一个,粘贴时注意前后不要有空格。

  2. 报错 SSLError:别怕,代码里已经加了 verify=False,应该不会报这个错了。如果还报,把错误截图发我。

  3. 报错 JSONDecodeError:可能是网络问题返回了空内容,重新运行一次试试。

现在去试试吧!当你亲眼看到 401 和 200 的差别时,你对 API 认证的理解就真正入门了。加油!💪😊

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐