大家好!今天咱来聊聊 Requests,一个简单又强大的HTTP库,让你轻松实现各种网络请求操作!
一、Requests简介
Requests 是 Python 的一个 HTTP 库,以简单、直观且人性化著称,旨在让 HTTP 请求变得更容易。相比内置的 urllib
模块,Requests 的 API 更优雅,编码体验更舒适。
为什么选择 Requests?
简洁的语法:一行代码完成 HTTP 请求。
功能强大:支持各种 HTTP 方法(GET、POST、PUT、DELETE 等)。
易用性:内置处理 cookie、会话、SSL 验证等常见需求。
社区支持:丰富的文档和强大的用户群体。
二、Requests 基础用法
1. 安装 Requests
pip install requests
2. 基本请求示例
GET 请求
import requests
# 发送 GET 请求
response = requests.get('https://jsonplaceholder.typicode.com/posts/1')
# 检查响应状态
if response.status_code == 200:
print(response.json())
else:
print(f"请求失败,状态码:{response.status_code}")
POST 请求
# 发送 POST 请求
payload = {'title': 'foo', 'body': 'bar', 'userId': 1}
response = requests.post('https://jsonplaceholder.typicode.com/posts', json=payload)
if response.status_code == 201:
print("创建成功:", response.json())
else:
print(f"请求失败,状态码:{response.status_code}")
三、Requests 高级功能
1. 会话管理
通过 requests.Session()
,你可以在多个请求间共享会话信息,如 Cookie。
# 创建会话对象
session = requests.Session()
# 在会话中发送请求
session.get('https://httpbin.org/cookies/set/sessioncookie/123456')
response = session.get('https://httpbin.org/cookies')
print("共享的Cookie:", response.json())
2. 超时和重试
设置超时以避免请求挂起,并通过 urllib3
实现自动重试。
from requests.adapters import HTTPAdapter
from requests.packages.urllib3.util.retry import Retry
# 配置重试策略
retry_strategy = Retry(
total=3,
backoff_factor=1,
status_forcelist=[429, 500, 502, 503, 504],
method_whitelist=["HEAD", "GET", "OPTIONS"]
)
adapter = HTTPAdapter(max_retries=retry_strategy)
session = requests.Session()
session.mount("https://", adapter)
session.mount("http://", adapter)
try:
response = session.get('https://httpbin.org/status/500', timeout=5)
print(response.status_code)
except requests.exceptions.RequestException as e:
print(f"请求失败:{e}")
3. 文件上传
Requests 也可以轻松实现文件上传。
files = {'file': ('test.txt', open('test.txt', 'rb'))}
response = requests.post('https://httpbin.org/post', files=files)
print(response.json())
四、实用技巧和最佳实践
1. 自定义 Headers 和参数
headers = {'User-Agent': 'my-app'}
params = {'key': 'value'}
response = requests.get('https://httpbin.org/get', headers=headers, params=params)
print(response.json())
2. 处理 JSON 响应
response = requests.get('https://jsonplaceholder.typicode.com/posts/1')
data = response.json()
print(f"标题:{data['title']}")
print(f"内容:{data['body']}")
3. SSL 验证
在某些场景下,可能需要禁用 SSL 验证。
try:
response = requests.get('https://expired.badssl.com', verify=False)
print(response.text)
except requests.exceptions.SSLError as e:
print(f"SSL 错误:{e}")
五、常见问题和解决方案
1. 超时问题
如果网络延迟导致请求挂起,可以通过设置超时避免。
try:
response = requests.get('https://httpbin.org/delay/10', timeout=2)
except requests.exceptions.Timeout:
print("请求超时")
2. 异常处理
try:
response = requests.get('https://invalid.url')
response.raise_for_status()
except requests.exceptions.RequestException as e:
print(f"请求出错:{e}")
3. 数据过大导致内存占用
对于大文件下载,使用流式下载以节省内存。
response = requests.get('https://speed.hetzner.de/100MB.bin', stream=True)
with open('100MB.bin', 'wb') as f:
for chunk in response.iter_content(chunk_size=8192):
f.write(chunk)
六、最佳实践总结
安全性:
避免使用
verify=False
,除非必要。避免直接暴露敏感信息,如 API 密钥。
性能优化:
使用会话对象复用连接。
对大文件使用流式下载。
错误处理:
捕获并处理常见异常。
提供清晰的错误日志。
这就是今天关于 Requests 的分享!通过这些技巧,相信你能更轻松地处理各种 HTTP 请求。记住,网络请求虽然强大,但一定要安全使用!
欢迎评论区分享你的 Requests 使用经验!🎉