Python3 requests 模块
requests 是 Python 中最常用的第三方 HTTP 客户端库,用于发送各种 HTTP 请求(如 GET、POST 等),处理响应数据,比 Python 内置的 urllib 更简洁易用。
一、安装 requests
requests 不是 Python 标准库,需要先通过 pip 安装:pip install requests
二、基本使用
1. 发送 GET 请求
GET 是最常用的 HTTP 方法,用于从服务器获取数据。
import requests
# 发送 GET 请求
url = "https://httpbin.org/get" # 测试接口
response = requests.get(url)
# 响应内容处理
print("状态码:", response.status_code) # 200 表示成功
print("响应头:", response.headers) # 字典形式的响应头
print("文本内容:", response.text) # 字符串形式的响应体
print("字节内容:", response.content) # 字节形式的响应体(用于图片等二进制数据)
2. 带参数的 GET 请求
如果需要在 URL 中添加查询参数(如
?key1=value1&key2=value2),可以用 params 参数传递字典,requests 会自动处理编码:import requests
url = "https://httpbin.org/get"
params = {
"name": "张三",
"age": 20
}
# 发送带参数的 GET 请求
response = requests.get(url, params=params)
print("最终请求的 URL:", response.url) # 自动拼接为:https://httpbin.org/get?name=张三&age=20
print("响应数据(JSON):", response.json()) # 解析 JSON 响应(返回字典)
注意:response.json()仅适用于响应体是 JSON 格式的情况,否则会抛出JSONDecodeError。
3. 发送 POST 请求
POST 常用于向服务器提交数据(如表单提交、API 数据提交)。
(1)提交表单数据(application/x-www-form-urlencoded)
用
data 参数传递字典:import requests
url = "https://httpbin.org/post"
data = {
"username": "test",
"password": "123456"
}
# 发送 POST 请求(表单数据)
response = requests.post(url, data=data)
print(response.json())
(2)提交 JSON 数据(application/json)
用
json 参数传递字典,requests 会自动设置 Content-Type: application/json:import requests
url = "https://httpbin.org/post"
json_data = {
"name": "李四",
"hobby": ["读书", "运动"]
}
# 发送 POST 请求(JSON 数据)
response = requests.post(url, json=json_data)
print(response.json())
三、高级功能
1. 设置请求头(Headers)
有些网站会验证请求头(如
User-Agent),模拟浏览器请求可以避免被拦截:import requests
url = "https://httpbin.org/get"
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36",
"Accept": "application/json"
}
response = requests.get(url, headers=headers)
print(response.text)
2. 处理 cookies
requests 会自动处理响应中的 cookies,也可以手动设置请求 cookies:
import requests
url = "https://httpbin.org/cookies"
# 手动设置 cookies
cookies = {"user_id": "12345"}
response = requests.get(url, cookies=cookies)
print(response.json())
# 获取响应中的 cookies
print("响应 cookies:", response.cookies.get_dict()) # 字典形式的 cookies
3. 会话保持(Session)
当需要维持会话(如登录后保持登录状态)时,使用
Session 对象:import requests
# 创建会话对象
session = requests.Session()
# 第一步:登录(会话会自动保存 cookies)
login_url = "https://httpbin.org/post"
login_data = {"username": "test", "password": "123"}
session.post(login_url, data=login_data)
# 第二步:访问需要登录的页面(自动携带登录 cookies)
profile_url = "https://httpbin.org/get"
response = session.get(profile_url)
print(response.text)
# 关闭会话
session.close()
4. 异常处理
网络请求可能出现各种错误(如超时、连接失败等),需要捕获异常:
import requests
from requests.exceptions import RequestException, Timeout, ConnectionError
url = "https://httpbin.org/get"
try:
# 设置超时时间(秒)
response = requests.get(url, timeout=5)
response.raise_for_status() # 若状态码为 4xx/5xx,抛出 HTTPError
print("请求成功:", response.text)
except Timeout:
print("请求超时")
except ConnectionError:
print("连接失败")
except RequestException as e:
print(f"请求出错:{e}")
response.raise_for_status()会在状态码为 4xx(客户端错误)或 5xx(服务器错误)时抛出HTTPError。
四、总结
requests 模块简化了 HTTP 请求的处理,核心功能包括:- 发送 GET/POST 等请求
- 处理参数、请求头、cookies
- 解析 JSON 响应
- 会话保持和异常处理
浙公网安备 33010602011771号