本文目录导读:

在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等参数
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播