requests库怎么发送POST请求?

访客 python案例 5

本文目录导读:

  1. 基本POST请求
  2. 发送表单数据 (Form Data)
  3. 发送JSON数据
  4. 发送文件
  5. 携带自定义Headers
  6. 设置超时
  7. 处理Cookies
  8. 使用Session保持会话
  9. 完整的错误处理示例
  10. 发送XML或其他格式
  11. 参数说明

在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请求的常用方法,根据实际需求选择合适的参数即可。

标签: requests POST

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