Python请求参数案例如何传递参数

wen python案例 24

本文目录导读:

Python请求参数案例如何传递参数

  1. GET请求传递参数
  2. POST请求传递参数
  3. 文件上传参数
  4. 组合参数传递
  5. 完整案例 - 爬取API数据
  6. 参数传递总结

在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 参数,不需要手动编码
  • 可以同时使用 paramsdataheaders 等参数

抱歉,评论功能暂时关闭!