Python Requests:HTTP 请求利器,轻松玩转网络操作!

文摘   2024-12-10 16:54   广西  

大家好!今天咱来聊聊 Requests,一个简单又强大的HTTP库,让你轻松实现各种网络请求操作!

一、Requests简介

Requests 是 Python 的一个 HTTP 库,以简单、直观且人性化著称,旨在让 HTTP 请求变得更容易。相比内置的 urllib 模块,Requests 的 API 更优雅,编码体验更舒适。

为什么选择 Requests?

  1. 简洁的语法:一行代码完成 HTTP 请求。

  2. 功能强大:支持各种 HTTP 方法(GET、POST、PUT、DELETE 等)。

  3. 易用性:内置处理 cookie、会话、SSL 验证等常见需求。

  4. 社区支持:丰富的文档和强大的用户群体。


二、Requests 基础用法

1. 安装 Requests


pip install requests

2. 基本请求示例

GET 请求


import requests

# 发送 GET 请求
response = requests.get('https://jsonplaceholder.typicode.com/posts/1')

# 检查响应状态
if response.status_code == 200:
    print(response.json())
else:
    print(f"请求失败,状态码:{response.status_code}")

POST 请求


# 发送 POST 请求
payload = {'title': 'foo', 'body': 'bar', 'userId': 1}
response = requests.post('https://jsonplaceholder.typicode.com/posts', json=payload)

if response.status_code == 201:
    print("创建成功:", response.json())
else:
    print(f"请求失败,状态码:{response.status_code}")

三、Requests 高级功能

1. 会话管理

通过 requests.Session(),你可以在多个请求间共享会话信息,如 Cookie。


# 创建会话对象
session = requests.Session()

# 在会话中发送请求
session.get('https://httpbin.org/cookies/set/sessioncookie/123456')
response = session.get('https://httpbin.org/cookies')

print("共享的Cookie:", response.json())

2. 超时和重试

设置超时以避免请求挂起,并通过 urllib3 实现自动重试。


from requests.adapters import HTTPAdapter
from requests.packages.urllib3.util.retry import Retry

# 配置重试策略
retry_strategy = Retry(
    total=3,
    backoff_factor=1,
    status_forcelist=[429, 500, 502, 503, 504],
    method_whitelist=["HEAD", "GET", "OPTIONS"]
)

adapter = HTTPAdapter(max_retries=retry_strategy)
session = requests.Session()
session.mount("https://", adapter)
session.mount("http://", adapter)

try:
    response = session.get('https://httpbin.org/status/500', timeout=5)
    print(response.status_code)
except requests.exceptions.RequestException as e:
    print(f"请求失败:{e}")

3. 文件上传

Requests 也可以轻松实现文件上传。


files = {'file': ('test.txt', open('test.txt', 'rb'))}
response = requests.post('https://httpbin.org/post', files=files)
print(response.json())

四、实用技巧和最佳实践

1. 自定义 Headers 和参数


headers = {'User-Agent': 'my-app'}
params = {'key': 'value'}

response = requests.get('https://httpbin.org/get', headers=headers, params=params)
print(response.json())


2. 处理 JSON 响应


response = requests.get('https://jsonplaceholder.typicode.com/posts/1')
data = response.json()

print(f"标题:{data['title']}")
print(f"内容:{data['body']}")

3. SSL 验证

在某些场景下,可能需要禁用 SSL 验证。


try:
    response = requests.get('https://expired.badssl.com', verify=False)
    print(response.text)
except requests.exceptions.SSLError as e:
    print(f"SSL 错误:{e}")

五、常见问题和解决方案

1. 超时问题

如果网络延迟导致请求挂起,可以通过设置超时避免。


try:
    response = requests.get('https://httpbin.org/delay/10', timeout=2)
except requests.exceptions.Timeout:
    print("请求超时")

2. 异常处理


try:
    response = requests.get('https://invalid.url')
    response.raise_for_status()
except requests.exceptions.RequestException as e:
    print(f"请求出错:{e}")

3. 数据过大导致内存占用

对于大文件下载,使用流式下载以节省内存。


response = requests.get('https://speed.hetzner.de/100MB.bin', stream=True)

with open('100MB.bin', 'wb') as f:
    for chunk in response.iter_content(chunk_size=8192):
        f.write(chunk)

六、最佳实践总结

  1. 安全性

  • 避免使用 verify=False,除非必要。

  • 避免直接暴露敏感信息,如 API 密钥。

  • 性能优化

    • 使用会话对象复用连接。

    • 对大文件使用流式下载。

  • 错误处理

    • 捕获并处理常见异常。

    • 提供清晰的错误日志。


    这就是今天关于 Requests 的分享!通过这些技巧,相信你能更轻松地处理各种 HTTP 请求。记住,网络请求虽然强大,但一定要安全使用!

    欢迎评论区分享你的 Requests 使用经验!🎉

    养护美丽
    分享养护美丽 ,专注于生活情感随笔创作领域
     最新文章