在Python的网络请求领域,requests库以其简洁的API、强大的功能和人性化的设计,成为了开发者处理HTTP请求的首选工具。无论是简单的接口调用、复杂的会话维持,还是数据格式处理,requests都能轻松应对。本文将系统梳理requests库的核心用法,从高层便捷API到会话级请求,帮你快速掌握网络请求的精髓。
requests库最常用的功能是封装了各类HTTP方法的高层API,这些方法无需手动指定请求类型,底层均通过requests.request()实现,适合快速完成简单请求。
| 方法 | 作用 | 核心参数 |
|---|---|---|
requests.get() | 发送GET请求(用于获取资源) | params(URL查询参数)、**kwargs(其他配置) |
requests.post() | 发送POST请求(用于提交数据) | data(表单数据)、json(JSON数据)、** kwargs |
requests.put() | 发送PUT请求(用于更新资源) | data(更新数据)、**kwargs |
requests.delete() | 发送DELETE请求(用于删除资源) | ** kwargs |
requests.head() | 发送HEAD请求(仅获取响应头) | **kwargs |
requests.options() | 发送OPTIONS请求(获取服务器支持的方法) | ** kwargs |
**kwargs:灵活接收任意关键字参数(如headers、cookies、timeout等),是requests灵活性的核心。requests.get(url, headers={"User-Agent": "Chrome"}, timeout=10)pythonimport requests
url = "https://api.example.com/users"
# 查询参数:page=1,size=10(会自动拼接到URL:?page=1&size=10)
params = {"page": 1, "size": 10}
# 发送GET请求
response = requests.get(url, params=params)
# 打印响应内容
print(response.json()) # 解析JSON响应
python# 提交表单数据(默认Content-Type: application/x-www-form-urlencoded)
data = {"username": "test", "password": "123456"}
response = requests.post("https://api.example.com/login", data=data)
# 提交JSON数据(自动设置Content-Type: application/json)
json_data = {"name": "Alice", "age": 25}
response = requests.post("https://api.example.com/register", json=json_data)
requests.request()是所有高层方法的底层实现,支持通过method参数指定任意 HTTP 方法(如GET、POST、PUT等),适合需要动态控制请求类型的场景。
pythonrequests.request(method, url, **kwargs)
method:字符串类型,指定 HTTP 方法(如"GET"、"POST"); url:请求的 URL; ** kwargs:与高层 API 一致的扩展参数(params、data、headers等)。
python
# 等价于requests.get()
requests.request("GET", "https://api.example.com", params={"id": 1})
# 等价于requests.post()
requests.request("POST", "https://api.example.com/submit", data={"key": "value"})
当需要多次请求同一服务且保持上下文(如登录状态、Cookie)时,requests.Session()是最佳选择。 会话对象会自动保留 Cookie,共享连接池,提升效率。
python
# 创建会话对象
s = requests.Session()
# 会话内的第一次请求(如登录)
login_data = {"username": "admin", "password": "admin123"}
s.post("https://api.example.com/login", data=login_data) # 登录后Cookie被保留
# 会话内的后续请求(自动携带登录Cookie)
response = s.get("https://api.example.com/user/profile") # 无需重复传Cookie
print(response.text) # 可获取登录后的用户信息
自动维持 Cookie,无需手动传递;
复用 TCP 连接,减少握手开销;
支持批量设置请求头(对所有会话内请求生效):
pythons = requests.Session()
s.headers.update({"User-Agent": "Mozilla/5.0", "Accept": "application/json"})
# 后续请求会自动携带上述headers
无论是高层 API 还是会话对象,核心参数的作用一致,掌握这些参数能让你灵活应对各类场景。
作用:定义 URL 末尾的查询参数,格式为字典,会自动拼接为?key1=value1&key2=value2; 示例:
pythonparams = {"name": "inception", "year": 2010}
requests.get("https://api.example.com/movies", params=params)
# 实际URL:https://api.example.com/movies?name=inception&year=2010
作用:提交表单格式数据(如application/x-www-form-urlencoded),适用于表单提交场景;
格式:字典或字符串(字典会自动编码为key=value&key2=value2);
示例:
python
data = {"username": "test", "email": "test@example.com"}
requests.post("https://api.example.com/signup", data=data)
作用:提交 JSON 格式数据(自动设置Content-Type: application/json),适用于现代 API 交互;
格式:符合 JSON 规范的字典、列表等(requests会自动序列化);
示例:
pythonjson_data = {
"name": "Bob",
"age": 30,
"hobbies": ["football", "music"]
}
requests.post("https://api.example.com/user", json=json_data)
作用:传递请求的元数据(如浏览器标识、认证信息、数据格式声明等); 示例
pythonheaders = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64)", # 模拟浏览器
"Authorization": "Bearer abc123456" # 携带认证令牌
}
requests.get("https://api.example.com/protected", headers=headers)
作用:手动指定 Cookie 数据(通常用于模拟登录状态); 格式:字典(键为 Cookie 名,值为 Cookie 值); 示例:
pythoncookies = {"session_id": "xyz789", "user_id": "123"}
requests.get("https://api.example.com/user", cookies=cookies)
在requests中,json参数依赖 JSON 格式规范,掌握其规则能避免数据提交错误。
整体用{}包裹(表示对象);
数据以键值对"key": value形式存在(键必须用双引号);
键值对之间用,分隔(最后一个键值对后无逗号);
值的类型:
字符串(双引号包裹,如"name": "Alice");
数字(整数 / 浮点数,如"age": 25);
布尔值(true/false,小写);
数组([]包裹,如"hobbies": ["reading", "coding"]);
嵌套对象(如"address": {"city": "Beijing"});
null(表示空值,如"avatar": null)。
json { "name": "Bob", "age": 30, "is_student": false, "hobbies": ["football", "music"], "contact": { "email": "bob@example.com", "phone": "123456789" }, "address": null }
简单场景:优先使用高层 API(get()、post()等),快速实现功能;
动态请求类型:用request()方法,通过method参数灵活切换;
多请求维持状态:用Session()对象,自动保留上下文,提升效率;
参数使用:根据数据类型选择params(URL 参数)、data(表单)、json(JSON),配合headers和cookies控制请求细节。
本文作者:haotian
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!