当前位置:首页 > Python > 正文

Python Requests教程:发送HTTP请求的完整指南 | Python编程

Python Requests库教程

掌握HTTP请求发送的完整指南

为什么选择Requests库?

Requests是Python中最受欢迎的HTTP库,具有以下优势:

  • ') no-repeat left center;">简单易用的API设计
  • ') no-repeat left center;">自动内容解码
  • ') no-repeat left center;">支持HTTPS和连接池
  • ') no-repeat left center;">完善的文档和社区支持

安装Requests库

使用pip安装Requests:

pip install requests

发送GET请求

GET请求用于从服务器获取数据:

import requests

# 发送简单的GET请求
response = requests.get('https://api.example.com/data')

# 检查请求是否成功
if response.status_code == 200:
    # 解析JSON响应
    data = response.json()
    print(f"获取到 {len(data)} 条记录")
else:
    print(f"请求失败,状态码: {response.status_code}")

带参数的GET请求

使用params参数传递查询参数:

params = {
    'page': 1,
    'limit': 20,
    'sort': 'date_desc'
}

response = requests.get(
    'https://api.example.com/items',
    params=params
)

print(f"请求URL: {response.url}")
# 输出: https://api.example.com/items?page=1&limit=20&sort=date_desc

发送POST请求

POST请求用于向服务器提交数据:

# 准备要提交的数据
user_data = {
    'name': '张三',
    'email': 'zhangsan@example.com',
    'age': 28
}

# 发送POST请求
response = requests.post(
    'https://api.example.com/users',
    json=user_data  # 自动设置为application/json
)

if response.status_code == 201:
    print("用户创建成功!")
    new_user = response.json()
    print(f"新用户ID: {new_user['id']}")

提交表单数据

使用data参数提交表单数据:

login_data = {
    'username': 'myuser',
    'password': 'securepassword123'
}

response = requests.post(
    'https://api.example.com/login',
    data=login_data  # 自动设置为application/x-www-form-urlencoded
)

设置请求头

自定义请求头以满足API要求:

headers = {
    'User-Agent': 'MyApp/1.0',
    'Authorization': 'Bearer my_access_token',
    'Accept': 'application/json',
    'Content-Type': 'application/json'
}

response = requests.get(
    'https://api.example.com/protected-data',
    headers=headers
)

处理响应

Response对象包含服务器返回的所有信息:

response = requests.get('https://api.example.com/data')

# 状态码
print(f"状态码: {response.status_code}")

# 响应头
print("响应头:")
for key, value in response.headers.items():
    print(f"  {key}: {value}")

# 响应内容
print(f"文本内容: {response.text[:100]}...")  # 前100个字符

# JSON响应 (如果是JSON格式)
if 'application/json' in response.headers.get('Content-Type', ''):
    data = response.json()
    print(f"JSON数据: {data}")

# 二进制内容 (如图片)
image_data = response.content
with open('image.jpg', 'wb') as f:
    f.write(image_data)

错误处理

处理请求过程中可能出现的异常:

try:
    response = requests.get('https://api.example.com/data', timeout=5)
    response.raise_for_status()  # 如果状态码不是200,抛出HTTPError异常
    
    data = response.json()
    print(data)
    
except requests.exceptions.HTTPError as err:
    print(f"HTTP错误: {err}")
except requests.exceptions.ConnectionError as err:
    print(f"连接错误: {err}")
except requests.exceptions.Timeout as err:
    print(f"请求超时: {err}")
except requests.exceptions.RequestException as err:
    print(f"请求异常: {err}")

其他HTTP方法

Requests支持所有HTTP方法:

# PUT请求 - 更新资源
response = requests.put(
    'https://api.example.com/users/123',
    json={'email': 'new_email@example.com'}
)

# DELETE请求 - 删除资源
response = requests.delete('https://api.example.com/users/123')

# PATCH请求 - 部分更新资源
response = requests.patch(
    'https://api.example.com/users/123',
    json={'age': 31}
)

高级用法

使用会话保持状态

# 创建会话对象
with requests.Session() as session:
    # 登录
    session.post('https://example.com/login', data={'user': 'name', 'pass': 'word'})
    
    # 使用同一个会话访问需要认证的页面
    response = session.get('https://example.com/dashboard')
    print(response.text)

设置超时

# 连接超时3秒,读取超时7秒
try:
    response = requests.get('https://example.com', timeout=(3, 7))
except requests.exceptions.Timeout:
    print("请求超时")

使用代理

proxies = {
    'http': 'http://10.10.1.10:3128',
    'https': 'http://10.10.1.10:1080',
}

requests.get('http://example.org', proxies=proxies)

开始使用Requests库吧!

Requests库简化了Python中的HTTP请求处理,无论是与REST API交互、抓取网页内容还是测试Web服务,它都是必备工具。

立即安装并开始构建强大的网络应用!

发表评论