本文目录导读:

在Python中,requests库提供了多种传递参数的方式,以下是详细的案例说明:
GET请求传递参数
使用params参数(推荐)
import requests
# 基础用法
params = {
'name': '张三',
'age': 25,
'city': '北京'
}
response = requests.get('https://api.example.com/search', params=params)
print(response.url) # 自动编码参数
# 复杂参数(包含列表)
params = {
'keywords': ['python', 'requests', 'api'],
'page': 1,
'limit': 20
}
response = requests.get('https://api.example.com/search', params=params)
print(response.url) # keywords=python&keywords=requests&keywords=api
手动拼接URL
# 不推荐,容易出错 url = f"https://api.example.com/search?name=张三&age=25" response = requests.get(url)
POST请求传递参数
使用data参数(表单数据)
# 表单数据
data = {
'username': 'admin',
'password': '123456',
'remember': True
}
response = requests.post('https://api.example.com/login', data=data)
# 发送JSON格式数据
import json
data = {'key': 'value'}
response = requests.post('https://api.example.com/api', data=json.dumps(data))
使用json参数(自动序列化)
# 自动将字典转换为JSON格式
payload = {
'user': {
'name': '李四',
'email': 'lisi@example.com'
},
'items': ['item1', 'item2']
}
response = requests.post('https://api.example.com/create', json=payload)
# 设置请求头
headers = {'Content-Type': 'application/json'}
response = requests.post('https://api.example.com/create',
json=payload,
headers=headers)
文件上传参数
# 上传单个文件
files = {'file': open('report.pdf', 'rb')}
response = requests.post('https://api.example.com/upload', files=files)
# 上传多个文件
files = {
'file1': ('file1.txt', open('file1.txt', 'rb'), 'text/plain'),
'file2': ('file2.jpg', open('file2.jpg', 'rb'), 'image/jpeg')
}
response = requests.post('https://api.example.com/upload', files=files)
# 文件+数据混合上传
response = requests.post('https://api.example.com/upload',
files=files,
data={'description': 'My files'})
组合参数传递
# GET+Headers+Cookies
headers = {'User-Agent': 'Mozilla/5.0'}
cookies = {'session_id': 'abc123'}
params = {'page': 1}
response = requests.get('https://api.example.com/data',
params=params,
headers=headers,
cookies=cookies)
# POST+认证+超时
auth = ('username', 'password')
data = {'key': 'value'}
response = requests.post('https://api.example.com/secure',
data=data,
auth=auth,
timeout=5)
完整案例 - 爬取API数据
import requests
from requests.exceptions import RequestException
class APIClient:
def __init__(self):
self.base_url = "https://api.example.com"
self.session = requests.Session()
self.session.headers.update({
'User-Agent': 'Mozilla/5.0',
'Accept': 'application/json'
})
def get_users(self, page=1, limit=10):
"""获取用户列表"""
try:
params = {
'page': page,
'limit': limit,
'sort': '-created_at'
}
response = self.session.get(
f"{self.base_url}/users",
params=params,
timeout=5
)
response.raise_for_status()
return response.json()
except RequestException as e:
print(f"请求失败: {e}")
return None
def create_user(self, user_data):
"""创建用户"""
try:
response = self.session.post(
f"{self.base_url}/users",
json=user_data,
timeout=3
)
return response.status_code == 201
except RequestException as e:
print(f"创建失败: {e}")
return False
# 使用示例
client = APIClient()
# GET请求
users = client.get_users(page=1, limit=5)
if users:
print(f"获取到 {len(users)} 个用户")
# POST请求
new_user = {
"name": "王五",
"email": "wangwu@example.com"
}
if client.create_user(new_user):
print("用户创建成功")
参数传递总结
| 请求类型 | 参数方式 | 应用场景 |
|---|---|---|
| GET | params |
URL查询参数 |
| POST | data |
表单提交、文件上传 |
| POST | json |
RESTful API |
| POST | files |
文件上传 |
| 所有请求 | headers |
自定义请求头 |
| 所有请求 | cookies |
Cookie传递 |
| 所有请求 | auth |
HTTP认证 |
注意事项:
- 使用
params时,requests会自动进行URL编码 - 使用
json比手动使用data=json.dumps()更方便 - 文件上传时使用
files参数,不需要手动编码 - 可以同时使用
params、data、headers等参数