本文目录导读:
在Python的requests库中,发送POST请求主要使用requests.post()方法,以下是几种常见的使用方式:
基本POST请求
import requests
# 不带参数的POST请求
response = requests.post('https://httpbin.org/post')
print(response.text)
发送表单数据 (Form Data)
最常见的POST请求方式,使用 data 参数:
import requests
url = 'https://httpbin.org/post'
data = {
'username': 'admin',
'password': '123456'
}
response = requests.post(url, data=data)
print(response.json())
发送JSON数据
使用 json 参数自动序列化:
import requests
url = 'https://httpbin.org/post'
json_data = {
'name': '张三',
'age': 25,
'skills': ['Python', 'Java']
}
response = requests.post(url, json=json_data)
print(response.json())
发送文件
使用 files 参数上传文件:
import requests
url = 'https://httpbin.org/post'
files = {
'file': ('test.txt', 'Hello World!', 'text/plain')
# 或者直接打开文件
# 'file': open('test.txt', 'rb')
}
response = requests.post(url, files=files)
print(response.json())
携带自定义Headers
import requests
url = 'https://httpbin.org/post'
headers = {
'User-Agent': 'Mozilla/5.0',
'Authorization': 'Bearer your-token-here'
}
data = {
'key': 'value'
}
response = requests.post(url, headers=headers, data=data)
print(response.text)
设置超时
import requests
try:
response = requests.post('https://httpbin.org/post',
data={'key': 'value'},
timeout=5) # 5秒超时
print(response.status_code)
except requests.Timeout:
print('请求超时')
处理Cookies
import requests
url = 'https://httpbin.org/cookies'
cookies = {'session_id': '12345'}
data = {'action': 'login'}
# 方式1:直接传参
response = requests.post(url, data=data, cookies=cookies)
# 方式2:使用Session对象保持会话
session = requests.Session()
session.cookies.update(cookies)
response = session.post(url, data=data)
使用Session保持会话
import requests
session = requests.Session()
# 设置公共headers
session.headers.update({'User-Agent': 'Mozilla/5.0'})
# 登录
login_data = {'username': 'user', 'password': 'pass'}
session.post('https://example.com/login', data=login_data)
# 后续请求会自动携带登录后的cookie
response = session.get('https://example.com/dashboard')
完整的错误处理示例
import requests
from requests.exceptions import RequestException
def post_request(url, data):
try:
response = requests.post(
url,
data=data,
timeout=10,
headers={'Content-Type': 'application/x-www-form-urlencoded'}
)
# 检查状态码
response.raise_for_status()
# 返回JSON数据
return response.json()
except requests.ConnectionError:
print('网络连接错误')
except requests.Timeout:
print('请求超时')
except requests.HTTPError as e:
print(f'HTTP错误: {e}')
except Exception as e:
print(f'其他错误: {e}')
return None
# 使用
result = post_request('https://httpbin.org/post', {'key': 'value'})
发送XML或其他格式
import requests
url = 'https://httpbin.org/post'
xml_data = '<?xml version="1.0"?><root><item>data</item></root>'
response = requests.post(
url,
data=xml_data.encode('utf-8'), # 直接发送原始数据
headers={'Content-Type': 'application/xml'}
)
print(response.text)
参数说明
requests.post() 的常用参数:
- url: 请求的URL
- data: (dict/tuple/bytes) 表单数据
- json: (dict) JSON格式数据
- headers: (dict) 请求头
- cookies: (dict) Cookies
- files: (dict) 文件上传
- timeout: (int/float) 超时时间
- params: (dict) URL参数
- auth: (tuple) HTTP认证
- verify: (bool/str) SSL证书验证
选择 data 还是 json 取决于服务器期望的格式:
data→ 默认发送application/x-www-form-urlencoded格式json→ 自动发送application/json格式
这就是 requests 库发送POST请求的常用方法,根据实际需求选择合适的参数即可。