您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# Python使用requests模块与Web应用进行交互
## 引言
在现代Web开发中,与API或Web服务进行交互是常见需求。Python的`requests`模块以其简洁优雅的API成为HTTP客户端库的事实标准。本文将详细介绍如何使用`requests`模块完成GET/POST请求、处理响应、管理会话以及应对常见场景。
## 一、安装与基础使用
### 1.1 安装requests
```bash
pip install requests
import requests
response = requests.get('https://api.example.com/data')
print(response.status_code) # 200
print(response.text) # 响应内容
# URL参数
params = {'key1': 'value1', 'key2': 'value2'}
response = requests.get('https://api.example.com', params=params)
# 实际请求URL变为:
# https://api.example.com?key1=value1&key2=value2
# 表单数据
data = {'username': 'admin', 'password': 'secret'}
response = requests.post('https://api.example.com/login', data=data)
# JSON数据
json_data = {'name': 'Alice', 'age': 25}
response = requests.post('https://api.example.com/users', json=json_data)
response = requests.get('https://api.example.com/data')
# 响应内容
print(response.text) # 文本格式
print(response.json()) # 自动解析JSON
# 响应头
print(response.headers)
print(response.headers['Content-Type'])
# 状态码检查
response.raise_for_status() # 非200状态码抛出异常
# 创建会话保持cookies
session = requests.Session()
session.get('https://api.example.com/login', params={'user': 'test'})
response = session.get('https://api.example.com/dashboard')
# 连接超时3秒,读取超时5秒
requests.get('https://api.example.com', timeout=(3, 5))
files = {'file': open('report.xls', 'rb')}
response = requests.post('https://api.example.com/upload', files=files)
proxies = {
'http': 'http://10.10.1.10:3128',
'https': 'http://10.10.1.10:1080',
}
requests.get('https://api.example.com', proxies=proxies)
from requests.auth import HTTPBasicAuth
response = requests.get(
'https://api.example.com',
auth=HTTPBasicAuth('username', 'password')
)
headers = {'Authorization': 'Bearer YOUR_TOKEN'}
response = requests.get('https://api.example.com/protected', headers=headers)
# 禁用验证(不推荐生产环境使用)
requests.get('https://api.example.com', verify=False)
# 自定义CA证书
requests.get('https://api.example.com', verify='/path/to/cert.pem')
try:
response = requests.get('https://api.example.com', timeout=5)
response.raise_for_status()
except requests.exceptions.Timeout:
print("请求超时")
except requests.exceptions.HTTPError as err:
print(f"HTTP错误: {err}")
except requests.exceptions.RequestException as err:
print(f"请求异常: {err}")
# 启用调试日志
import logging
import http.client
http.client.HTTPConnection.debuglevel = 1
logging.basicConfig()
logging.getLogger().setLevel(logging.DEBUG)
# requests默认保持连接池
session = requests.Session()
for _ in range(10):
session.get('https://api.example.com') # 复用TCP连接
# 处理大文件时避免内存溢出
response = requests.get('https://example.com/large-file', stream=True)
with open('large_file', 'wb') as f:
for chunk in response.iter_content(chunk_size=8192):
f.write(chunk)
def get_user(user_id):
response = requests.get(f'https://api.example.com/users/{user_id}')
return response.json()
def create_user(user_data):
response = requests.post(
'https://api.example.com/users',
json=user_data,
headers={'Content-Type': 'application/json'}
)
return response.json()
response = requests.get('https://example.com')
from bs4 import BeautifulSoup
soup = BeautifulSoup(response.text, 'html.parser')
print(soup.title.string)
requests模块通过简洁的API实现了强大的HTTP客户端功能。掌握本文介绍的技术要点后,您已经能够处理大多数Web交互场景。对于更复杂的需求,可以考虑结合aiohttp实现异步请求,或使用requests-cache等扩展库实现缓存功能。
最佳实践提示: 1. 总是检查响应状态码 2. 为生产环境配置合理的超时时间 3. 敏感信息不要硬编码在代码中 4. 考虑使用retry机制处理临时性失败 “`
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。