【零基础上手】如何用 requests 发出你的第一个 HTTP 请求:三步实战指南
【免费下载链接】requestsA simple, yet elegant, HTTP library.项目地址: https://gitcode.com/GitHub_Trending/re/requests
当你需要抓一个接口的数据、或者调用外部 API 时,用标准库 urllib 写起来又长又难读。这篇文章用三步带你用 requests 这个 Python HTTP 请求库走完安装、发请求到处理错误的完整流程。
为什么用 requests 发 HTTP 请求:四个让你少写代码的理由
读完这节,你能给同事讲清楚“为什么发请求用 requests 而不是 urllib”。
- 为人写的接口:官网那句口号翻译成大白话就是“面向人类”,每种请求方式对应一个方法,不用手工拼 URL、手工处理编码。
- 代码短一半:GET、POST、PUT、DELETE 都是一行调用,同样任务 urllib 要十几行,这里三行就够。
- 报错分好类:超时、连不上、状态码异常各有一个专门的异常类型,捕错时不用猜。
- 会话能复用:一个 Session 对象可以连续发多个请求,自动带着 Cookie,适合登录后继续操作的场景。
requests 最快安装步骤:两条 pip 命令就能跑
读完这节,你能在终端完成 requests 的安装,并确认装好了。
python -m pip install requests python -m pip install --upgrade requests # 已装过就先升到最新版想要最新开发源码的话,也可以 git clone 后装:git clone https://gitcode.com/GitHub_Trending/re/requests,进目录再执行python -m pip install .。
requests 入门教程第一步:三行代码发出第一个 HTTP 请求
读完这节,你能发出一个真实的 GET 请求,并看懂服务器给你的回应。
import requests r = requests.get("https://api.github.com/events") print(r.status_code) # 状态码:服务器返回的回执,200 即成功 print(r.text[:80]) # 响应正文的前 80 个字符status_code就是回执:200 表示成功,404 表示地址不存在,500 表示服务器那边出了状况。r.text是文本正文,如果接口返回 JSON,直接调r.json()就能拿到字典,不用自己解析。
requests 使用示例:三个高频 HTTP 请求场景,照抄就能跑
读完这节,你能应付日常最常见的三种情况:带查询参数、提交数据、自定义请求头。
params 传参:参数放进字典,URL 不会写乱
把参数写成字典,requests 会自动拼到 URL 后面并做好编码:
params = {"key1": "value1", "key2": "value2"} r = requests.get("https://httpbin.org/get", params=params) print(r.url) # 末尾自动带上 ?key1=value1&key2=value2POST 提交:表单和 JSON 各一行
r = requests.post("https://httpbin.org/post", data={"name": "requests"}) r = requests.post("https://httpbin.org/post", json={"name": "requests"}) print(r.status_code)data提交的是表单格式,json提交的是 JSON 格式,服务端要求哪个就用哪个。
请求头自定义:让服务器知道你是谁
请求头就是随请求附带的附加信息,有些接口不写 User-Agent 会直接拒收:
headers = {"User-Agent": "my-app/1.0"} r = requests.get("https://api.github.com", headers=headers, timeout=3) print(r.status_code)顺手加上timeout=3:服务器 3 秒不回应就中断,避免程序一直卡死在那里。
requests 超时、连接错误怎么办:可直接套用的 try/except 模板
读完这节,你能把请求代码包上错误处理,网络一抖动程序也不会直接崩。
try: r = requests.get(url, timeout=3) # 3 秒超时 r.raise_for_status() # 4xx/5xx 会抛出 HTTPError except requests.exceptions.HTTPError as e: print("HTTP 错误:", e) except (requests.exceptions.ConnectionError, requests.exceptions.Timeout) as e: print("网络错误:", e)raise_for_status()是关键:不调用它,404 的响应看起来也像成功。requests 的异常都继承自RequestException,想兜底时用它接住全部即可。
| 报错 | 原因与处理 |
|---|---|
| ConnectionError | 断网或域名找不到,先查网络,必要时重试 |
| Timeout | 服务器太慢,调大 timeout 值或降低请求频率 |
| HTTPError | 状态码 ≥ 400,看数字定位:404 查地址、429 被限流、500 是服务端问题 |
玩转 requests 之后:四个进阶能力和学习入口
读完这节,你知道下一步能学什么、去仓库哪里找资料。
- 会话保持:创建
requests.Session(),连续请求复用连接,Cookie 自动携带。 - 文件上传:用
files参数传本地文件,自动组装成 multipart 表单。 - 代理:
proxies参数指定代理服务器,请求走它出去。 - SSL 验证:
verify传自定义证书路径,调试期也可以临时关闭。
细节展开想深入可以看 docs/user/advanced.rst,快速上手的完整版示例在 docs/user/quickstart.rst;仓库里的单元测试是现成的案例库,翻翻 tests/test_requests.py 就能看到真实项目怎么写请求。
小结:把全文串成三步
这篇文章带你走完了四步:装好 requests、发出第一个请求、练了三个高频场景、再给请求套上错误处理。下一步你可以随手找一个接口地址,在终端发一个 GET 请求并打印它的状态码,再把 timeout 改掉一次试试。做到这些,requests 就能真正用在你的项目里了 🐍
【免费下载链接】requestsA simple, yet elegant, HTTP library.项目地址: https://gitcode.com/GitHub_Trending/re/requests
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考