极简requests

requests 是 Python 中一个非常流行的 HTTP 库,用于发送 HTTP/1.1 请求。它简单易用,同时功能强大,可以处理各种常见的 HTTP 请求场景。

requests 架构

requests 的架构相对简单,主要基于 Python 的 urllib3 库。它提供了一个高层级的 API,让用户可以轻松地发送请求、处理响应和异常。

requests 的主要组成部分

  1. Request:代表一个 HTTP 请求。你可以通过传递参数来定制请求头、查询字符串、请求体等。
  2. Response:代表一个 HTTP 响应。它包含了从服务器返回的所有信息,如状态码、响应头、响应体等。
  3. Session:代表一个持续的会话,可以跨请求保持某些参数。它类似于浏览器中的会话,可以处理 cookies 和持久化某些参数。
  4. Adapters:适配器用于处理 HTTP 和 HTTPS 请求。requests 默认使用 urllib3 的适配器。
  5. Hooks:钩子是一种机制,允许你在请求的生命周期的某些点插入自定义代码。

Code案例

下面是一个使用 requests 的简单示例。

import requests
# 发送一个 GET 请求
response = requests.get('https://www.example.com') # 示例域名,实际中替换
# 检查响应状态码
if response.status_code == 200:
    print('成功获取内容')
else:
    print('请求失败,状态码:', response.status_code)
# 打印响应内容
print(response.text)
# 发送一个带参数的 GET 请求
params = {'key1': 'value1', 'key2': 'value2'}
response = requests.get('https://www.example.com', params=params) # 示例域名,实际中替换
# 发送一个 POST 请求
data = {'key1': 'value1', 'key2': 'value2'}
response = requests.post('https://www.example.com/post', data=data) # 示例域名,实际中替换
# 发送一个带有自定义头的请求
headers = {'User-Agent': 'my-app'}
response = requests.get('https://www.example.com', headers=headers)
# 使用 Session 对象
with requests.Session() as session:
    session.get('https://www.example.com')
    # 在会话中保持 cookies 和其他参数

在这个例子中,我们首先发送了一个 GET 请求,然后检查了状态码,并打印了响应内容。接着,我们展示了如何发送带参数的 GET 请求和 POST 请求,以及如何设置自定义请求头。最后,我们展示了如何使用 Session 对象来保持会话。

异常处理

requests 库中定义了几种异常,用于处理可能出现的 HTTP 请求错误。

from requests.exceptions import HTTPError, ConnectionError, Timeout, RequestException
try:
    response = requests.get('https://www.example.com', timeout=5)
    response.raise_for_status()
except HTTPError as http_err:
    print(f'HTTP error occurred: {http_err}')
except ConnectionError as conn_err:
    print(f'Connection error occurred: {conn_err}')
except Timeout as timeout_err:
    print(f'Timeout error occurred: {timeout_err}')
except RequestException as req_err:
    print(f'An error occurred: {req_err}')

在这个例子中,我们使用了 try-except 块来捕获和处理可能出现的异常。

希望这个解释能帮助你更好地理解 requests 库的架构和用法。

请注意,由于 https://www.example.com 是一个示例域名,实际使用时需要替换为真实的网页 URL

你可能感兴趣的:(python)