Pythonrequests库是一个用于发送HTTP请求的第三方库,以其简洁、优雅的API和强大的功能,成为Python开发者处理网络请求的首选工具。它让HTTP请求变得像访问本地文件一样简单直观。
1. 安装与导入
在开始使用前,需要先安装requests库。
pip install requests如果安装后运行时仍提示ModuleNotFoundError: No module named 'requests',可能的原因和解决方案包括:
- 检查环境:确保你安装
requests的Python环境与运行代码的环境一致(尤其是在使用PyCharm等IDE的虚拟环境时)。 - 切换国内镜像源:如果网络不佳导致安装失败,可以尝试使用清华、阿里云等国内镜像源加速安装。
- 避免同名文件冲突:确保你的项目目录下没有命名为
requests.py的文件,否则会覆盖官方库。 - 更新pip:使用
python -m pip install --upgrade pip更新pip工具。
安装成功后,在代码中导入即可:
import requests2. 发送基础请求
requests支持所有常见的HTTP方法,如 GET、POST、PUT、DELETE 等。
发送GET请求:使用
requests.get()方法,用于从服务器获取数据。response = requests.get(' https://api.example.com/data')如果需要传递查询参数,可以使用
params参数,库会自动完成URL编码。params = {'key1': 'value1', 'key2': 'value2'} response = requests.get(' https://api.example.com/data', params=params)发送POST请求:使用
requests.post()方法,用于向服务器提交数据。- 提交表单数据:使用
data参数。data = {'username': 'admin', 'password': '123456'} response = requests.post(' https://api.example.com/login', data=data) - 提交JSON数据:使用
json参数,库会自动将字典序列化为JSON并设置正确的请求头Content-Type: application/json。data = {'username': 'admin', 'password': '123456'} response = requests.post(' https://api.example.com/login', json=data)
- 提交表单数据:使用
3. 处理响应
发送请求后返回的response对象包含了服务器返回的所有信息。
- 检查状态码:通过
response.status_code获取HTTP状态码,例如200表示成功。可以使用response.raise_for_status()在状态码不是200时自动抛出异常。 - 获取响应内容:
response.text:以字符串形式返回响应内容(库会尝试自动解码)。response.content:以二进制字节形式返回响应内容,适用于下载图片、文件等。response.json():如果响应内容是JSON格式,此方法会将其解析为Python字典或列表。
- 查看响应头:通过
response.headers获取,它是一个字典。
4. 高级功能与配置
设置请求头:通过
headers参数传递字典,常用于设置User-Agent、Authorization令牌等。headers = {'User-Agent': 'my-app/1.0.0', 'Authorization': 'Bearer YOUR_TOKEN'} response = requests.get(url, headers=headers)使用会话 (Session):
requests.Session()对象可以在多个请求间保持某些参数(如cookies、headers),并复用TCP连接,提升性能。session = requests.Session() session.headers.update({'User-Agent': 'my-app/1.0.0'}) # 登录,会话会自动保存cookies session.post(' https://example.com/login', data={'user': 'name', 'pass': 'word'}) # 后续请求自动携带登录后的cookies response = session.get(' https://example.com/dashboard')设置超时:使用
timeout参数(单位:秒)防止请求无限期挂起。response = requests.get(url, timeout=5)设置代理:通过
proxies参数配置代理服务器。proxies = {'http': ' http://10.10.1.10:3128', 'https': ' http://10.10.1.10:1080' } response = requests.get(url, proxies=proxies)文件上传与下载:
- 上传:使用
files参数。files = {'file': open('report.pdf', 'rb')} response = requests.post(url, files=files) - 下载:获取
response.content并写入本地文件。response = requests.get(file_url) with open('local_file.pdf', 'wb') as f: f.write(response.content)
- 上传:使用
5. 错误与异常处理
网络请求可能失败,建议使用try-except块进行捕获。
try: response = requests.get(url, timeout=5) response.raise_for_status() # 如果状态码不是200,抛出HTTPError异常 # 处理成功响应 data = response.json() except requests.exceptions.Timeout: print("请求超时") except requests.exceptions.HTTPError as err: print(f"HTTP错误: {err}") except requests.exceptions.RequestException as err: print(f"请求异常: {err}")总结
Pythonrequests库的核心优势在于其“HTTP for Humans”的设计哲学,将复杂的HTTP协议封装成极其简单的方法调用。它功能全面,支持身份验证、连接池、自动内容解码、Cookie管理等,拥有丰富的文档和庞大的社区,是进行Web API调用、网络爬虫开发或任何需要HTTP通信任务的理想选择。