在Python的生态系统中,requests
库以其简洁优雅的API设计和强大的功能,成为HTTP请求处理领域的标杆工具。无论是数据爬虫开发、API接口调用,还是自动化测试场景,requests
都能将复杂的网络交互简化为几行可读性极高的代码。相比于Python内置的urllib
库,它无需手动拼接URL参数,自动处理Cookie和会话,支持多种数据格式传输,极大提升了开发效率。
本文将从零开始系统讲解requests
库的核心功能,涵盖安装配置、基础请求方法、参数传递、会话管理、高级优化技巧等全链路知识,并融入实际案例和工程化最佳实践。无论你是刚入门的新手,还是需要深化技能的中级开发者,都能在此找到进阶路径。
通过pip一键安装指定版本(推荐使用2.31.0及以上稳定版):
pip install requests==2.31.0 -i https://mirrors.aliyun.com/pypi/simple/ # 国内镜像加速
Anaconda用户可选择:
conda install requests
执行以下代码检查版本及可用性:
import requests
print(requests.__version__) # 输出示例:2.31.0
# GET请求(含URL参数)
params = {'key1': 'value1', 'key2': ['value2', 'value3']} # 支持多值参数
response = requests.get('http://httpbin.org/get', params=params)
# POST请求(表单/JSON)
data = {'user': 'admin', 'pwd': 'secret'}
response = requests.post('http://httpbin.org/post', data=data) # 表单提交
response = requests.post('http://httpbin.org/post', json=data) # 自动序列化为JSON
# PUT/DELETE等方法的调用方式类似[1]
print(response.status_code) # 状态码(200表示成功)
print(response.headers['Content-Type']) # 响应头信息
print(response.text) # 文本内容(自动解码)
print(response.json()) # JSON转Python对象(需确认Content-Type正确)
print(response.content) # 二进制流(适合图片/文件下载)
with open('image.jpg', 'wb') as f:
f.write(response.content) # 文件保存示例[2,7]
try:
response = requests.get(url, timeout=3)
response.raise_for_status() # 自动触发4xx/5xx异常
except requests.exceptions.HTTPError as err:
print(f"服务器错误:{err}")
except requests.exceptions.ConnectionError:
print("网络连接失败")
session = requests.Session()
session.headers.update({'User-Agent': 'Mozilla/5.0'}) # 全局请求头
# 登录后保持Cookie
login_data = {'username': 'test', 'password': 'test123'}
session.post('https://example.com/login', data=login_data)
profile = session.get('https://example.com/dashboard') # 自动携带认证信息
# 单文件上传
with open('report.pdf', 'rb') as f:
files = {'document': ('report.pdf', f, 'application/pdf')}
r = requests.post(url, files=files) # 自动识别multipart/form-data
# 多文件/大文件分块上传方案(需结合流式API)
proxies = {
'http': 'http://10.10.1.10:3128',
'https': 'http://user:[email protected]:1080' # 带鉴权的代理
}
requests.get(url, proxies=proxies)
# 基础认证
from requests.auth import HTTPBasicAuth
requests.get(url, auth=HTTPBasicAuth('user', 'pass')) # 简写:auth=('user','pass')
连接池复用:通过HTTPAdapter
配置连接池大小与重试策略
adapter = requests.adapters.HTTPAdapter(
pool_connections=50,
pool_maxsize=100,
max_retries=Retry(total=3, backoff_factor=1)
)
session.mount('http://', adapter)
异步请求:虽然requests
本身是同步库,但可结合asyncio
与aiohttp
实现并发:
import aiohttp
async def fetch(session, url):
async with session.get(url) as response:
return await response.text()
User-Agent
和Referer
time.sleep(random.uniform(1,3))
)规避IP封锁timeout
参数,建议5-10秒logging
模块记录请求详情,便于调试审计requests
库通过极简的设计哲学,将复杂的HTTP协议抽象为直观的方法调用,成为Python开发者不可或缺的工具。本文系统梳理了从基础请求到会话管理、从文件上传到性能优化的全栈知识体系。随着项目规模的扩大,开发者可进一步探索:
BeautifulSoup
/Scrapy
结合的爬虫架构requests-mock
的单元测试实践httpx
库进阶动手实践是掌握requests
的关键,建议读者从调用公共API(如GitHub API)开始,逐步构建自己的网络应用。
最新技术动态请关注作者:Python×CATIA工业智造
版权声明:转载请保留原文链接及作者信息