Python使用requests模块与Web应用进行交互

发布时间:2021-09-16 22:17:51 作者:chen
来源:亿速云 阅读:228
# Python使用requests模块与Web应用进行交互

## 引言

在现代Web开发中,与API或Web服务进行交互是常见需求。Python的`requests`模块以其简洁优雅的API成为HTTP客户端库的事实标准。本文将详细介绍如何使用`requests`模块完成GET/POST请求、处理响应、管理会话以及应对常见场景。

## 一、安装与基础使用

### 1.1 安装requests
```bash
pip install requests

1.2 发起GET请求

import requests

response = requests.get('https://api.example.com/data')
print(response.status_code)  # 200
print(response.text)  # 响应内容

二、核心功能详解

2.1 请求参数处理

# URL参数
params = {'key1': 'value1', 'key2': 'value2'}
response = requests.get('https://api.example.com', params=params)

# 实际请求URL变为:
# https://api.example.com?key1=value1&key2=value2

2.2 POST请求与数据发送

# 表单数据
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)

2.3 响应处理

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状态码抛出异常

三、高级功能

3.1 会话管理

# 创建会话保持cookies
session = requests.Session()
session.get('https://api.example.com/login', params={'user': 'test'})
response = session.get('https://api.example.com/dashboard')

3.2 超时设置

# 连接超时3秒,读取超时5秒
requests.get('https://api.example.com', timeout=(3, 5))

3.3 文件上传

files = {'file': open('report.xls', 'rb')}
response = requests.post('https://api.example.com/upload', files=files)

3.4 代理设置

proxies = {
  'http': 'http://10.10.1.10:3128',
  'https': 'http://10.10.1.10:1080',
}
requests.get('https://api.example.com', proxies=proxies)

四、安全与认证

4.1 Basic认证

from requests.auth import HTTPBasicAuth
response = requests.get(
    'https://api.example.com',
    auth=HTTPBasicAuth('username', 'password')
)

4.2 Bearer Token

headers = {'Authorization': 'Bearer YOUR_TOKEN'}
response = requests.get('https://api.example.com/protected', headers=headers)

4.3 SSL证书验证

# 禁用验证(不推荐生产环境使用)
requests.get('https://api.example.com', verify=False)

# 自定义CA证书
requests.get('https://api.example.com', verify='/path/to/cert.pem')

五、错误处理与调试

5.1 常见异常

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}")

5.2 调试请求

# 启用调试日志
import logging
import http.client

http.client.HTTPConnection.debuglevel = 1
logging.basicConfig()
logging.getLogger().setLevel(logging.DEBUG)

六、性能优化

6.1 连接池复用

# requests默认保持连接池
session = requests.Session()
for _ in range(10):
    session.get('https://api.example.com')  # 复用TCP连接

6.2 流式响应

# 处理大文件时避免内存溢出
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)

七、实际应用案例

7.1 调用REST API

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()

7.2 网页内容抓取

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机制处理临时性失败 “`

推荐阅读:
  1. HTTP协议(9)Python requests模块的使用
  2. Python requests模块session的用法

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

python

上一篇:scala隐式转换的用法

下一篇:OpenSceneGraph如何导出三角形数据

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》