Python3 requests 库
requests 是 Python 最流行的 HTTP 客户端库。官方 urllib 虽能用,但拼 URL、加请求头、处理响应都很繁琐;requests 一句 GET/POST 搞定请求,自动解析 JSON、管理连接,是爬虫和接口调用的首选。
安装
pip install requests # 第三方库,需先安装
发起 GET 请求
import requests
r = requests.get("https://httpbin.org/get")
print(r.status_code) # 输出:200
print(r.text[:80]) # 输出:响应正文的前 80 个字符
params 与 headers:携带参数和请求头
带查询串的请求把参数放进字典交给 params,requests 负责拼接与转义:
import requests
params = {"q": "python", "page": 2}
r = requests.get("https://httpbin.org/get", params=params)
print(r.url) # 输出:https://httpbin.org/get?q=python&page=2
# 自定义请求头用 headers 参数
r2 = requests.get("https://httpbin.org/get",
headers={"User-Agent": "Mozilla/5.0"})
响应对象常用属性
r = requests.get("https://httpbin.org/json")
print(r.status_code) # 输出:200
print(r.headers.get("Content-Type")) # 输出:application/json
print(r.text) # 输出:原始响应文本
print(r.json()) # 输出:自动把 JSON 解析为 dict/list
POST 提交:data 与 json
提交表单用 data,提交 JSON 用 json(会自动设置 Content-Type: application/json):
import requests
# 表单方式
r1 = requests.post("https://httpbin.org/post", data={"name": "张三"})
# JSON 方式(接口最常用)
r2 = requests.post("https://httpbin.org/post", json={"name": "张三"})
print(r2.json()["json"]) # 输出:{'name': '张三'}
timeout:设置超时
不设 timeout,请求可能无限期挂起。timeout=3 表示连接与读取各自最多等 3 秒:
import requests
try:
r = requests.get("https://httpbin.org/delay/5", timeout=3)
except requests.exceptions.Timeout:
print("请求超时") # 输出:请求超时
异常处理
网络错误、超时、状态码异常都应捕获。用 raise_for_status() 把 4xx/5xx 变成异常:
import requests
try:
r = requests.get("https://httpbin.org/status/500", timeout=5)
r.raise_for_status() # 状态码非 2xx 时抛 HTTPError
except requests.exceptions.RequestException as e:
print("请求失败:", e) # 输出:请求失败:500 Server Error ...
RequestException 是所有 requests 异常的基类,一次 except 即可兜底大部分错误。
示例:请求天气/翻译接口
以调用翻译类开放接口为例(具体地址、字段与鉴权以你所申请接口的文档为准):
# 需安装依赖并配置环境后运行:pip install requests
import requests
url = "https://api.example.com/translate" # 替换为你申请的接口地址
resp = requests.post(
url,
timeout=10,
json={"q": "hello world", "from": "en", "to": "zh"},
headers={"Authorization": "Bearer 你的APIKey"},
)
resp.raise_for_status()
print(resp.json()) # 输出:翻译结果字典(字段视接口而定)
小结:requests 用 GET/POST 一句话发请求——params 拼查询参数、data/json 提交数据、timeout 防挂起,响应对象提供 status_code/text/json();配合异常处理即可稳定调用各类 HTTP 接口。