Python API 消费讲座:requests 库的全面介绍
欢迎来到今天的 Python 技术讲座!今天我们要聊的是一个非常实用且强大的库——requests
。如果你曾经尝试过用 Python 与互联网上的数据打交道,那么 requests
可能已经进入了你的视野。它简单易用,功能强大,是 Python 开发者工具箱中不可或缺的一部分。
在接下来的时间里,我会以一种轻松诙谐的方式,带你深入了解 requests
库的核心功能和使用技巧。无论你是初学者还是有一定经验的开发者,相信都能在这场讲座中有所收获!
讲座大纲
- 什么是
requests
? - 安装与基本使用
- GET 请求:获取数据的艺术
- POST 请求:发送数据的奥秘
- 处理请求头与参数
- 文件上传与下载
- 错误处理与超时设置
- 会话管理:高效复用连接
- 总结与扩展
1. 什么是 requests
?
requests
是一个用于发送 HTTP 请求的第三方 Python 库。它使得与 Web 服务交互变得异常简单。相比内置的 urllib
,requests
提供了更直观、更优雅的接口,减少了冗长代码的编写。
为什么选择 requests
?
- 简单易用
- 功能丰富
- 社区支持广泛
- 文档详尽(国外技术文档提到:官方文档清晰明了)
2. 安装与基本使用
首先,我们需要安装 requests
。打开终端,输入以下命令:
pip install requests
安装完成后,我们可以通过以下代码验证是否成功:
import requests
response = requests.get('https://httpbin.org/get')
print(response.status_code) # 输出状态码
print(response.text) # 输出响应内容
这段代码向 https://httpbin.org/get
发送了一个 GET 请求,并打印了返回的状态码和内容。
3. GET 请求:获取数据的艺术
GET 请求是最常见的 HTTP 请求类型之一,通常用于从服务器获取资源。以下是一个完整的例子:
import requests
url = 'https://api.example.com/data'
params = {'key1': 'value1', 'key2': 'value2'}
response = requests.get(url, params=params)
print(response.url) # 打印实际请求的 URL
print(response.json()) # 如果返回的是 JSON 数据,可以直接解析
国外技术文档提示:params
参数会自动将字典转换为查询字符串,无需手动拼接 URL。
参数名称 | 描述 | 示例值 |
---|---|---|
url | 目标 URL | https://... |
params | 查询参数(可选) | {'key': 'val'} |
4. POST 请求:发送数据的奥秘
POST 请求通常用于向服务器提交数据。以下是一个示例:
import requests
url = 'https://api.example.com/post'
data = {'username': 'testuser', 'password': 'securepassword'}
response = requests.post(url, data=data)
print(response.status_code) # 输出状态码
print(response.text) # 输出响应内容
如果需要发送 JSON 格式的数据,可以使用 json
参数:
response = requests.post(url, json={'key': 'value'})
国外技术文档建议:尽量使用 json
参数,因为它会自动设置正确的 Content-Type 头部。
5. 处理请求头与参数
有时我们需要自定义请求头或添加认证信息。以下是实现方法:
import requests
url = 'https://api.example.com/resource'
headers = {'Authorization': 'Bearer YOUR_TOKEN'}
params = {'search': 'Python'}
response = requests.get(url, headers=headers, params=params)
print(response.headers) # 查看响应头
print(response.content) # 查看原始响应内容
常见头部字段 | 描述 | 示例值 |
---|---|---|
Authorization | 身份认证信息 | Bearer ... |
Content-Type | 请求体的内容类型 | application/json |
6. 文件上传与下载
文件上传
import requests
url = 'https://httpbin.org/post'
files = {'file': open('example.txt', 'rb')}
response = requests.post(url, files=files)
print(response.json())
文件下载
import requests
url = 'https://example.com/file.zip'
response = requests.get(url)
with open('downloaded_file.zip', 'wb') as f:
f.write(response.content)
7. 错误处理与超时设置
网络请求可能会失败,因此我们需要处理异常和设置超时时间:
import requests
try:
response = requests.get('https://api.example.com', timeout=5)
response.raise_for_status() # 如果状态码不是 200,抛出异常
except requests.exceptions.Timeout:
print("请求超时")
except requests.exceptions.HTTPError as e:
print(f"HTTP 错误: {e}")
except requests.exceptions.RequestException as e:
print(f"其他错误: {e}")
8. 会话管理:高效复用连接
如果需要多次向同一个服务器发送请求,使用 Session
对象可以提高效率:
import requests
session = requests.Session()
# 设置全局头部
session.headers.update({'Authorization': 'Bearer YOUR_TOKEN'})
response1 = session.get('https://api.example.com/resource1')
response2 = session.get('https://api.example.com/resource2')
session.close()
国外技术文档推荐:Session
对象不仅节省资源,还能自动管理 Cookie。
9. 总结与扩展
通过今天的讲座,我们学习了如何使用 requests
库进行 API 消费。以下是主要知识点的回顾:
- 安装与基本使用
- GET 和 POST 请求
- 请求头与参数的处理
- 文件上传与下载
- 错误处理与超时设置
- 会话管理
如果你对 requests
的高级功能感兴趣,可以进一步探索以下主题:
- OAuth 认证
- 流式请求
- SSL 验证
希望今天的讲座对你有所帮助!如果有任何问题,请随时提问。谢谢大家!