全面熟练掌握 requests 库及其底层方法调用逻辑

       在当今的软件开发领域,HTTP 客户端库是实现网络请求不可或缺的工具。Python 的 requests 库以其简洁的 API 和强大的功能成为了最受欢迎的 HTTP 客户端库之一。本文旨在帮助读者全面熟练掌握 requests 库的使用,以及理解其底层方法调用逻辑。

1. requests 库简介

requests 是一个简单易用的 HTTP 客户端库,它允许用户发送 HTTP/1.1 请求,无需手工添加查询字符串或编码。它支持多种功能,如会话管理、Cookies、代理、SSL 认证等。

2. 安装 requests 库

在开始之前,确保你的 Python 环境中安装了 requests 库。如果未安装,可以通过 pip 进行安装。

打开命令提示符输入以下代码:

pip install requests

3. 基本使用方法

requests 库提供了多种方法来发送 HTTP 请求,如 getpostputdelete 等。以下是一些基本的使用方法:

发送 GET 请求

GET请求用于从服务器检索数据。它是一种幂等操作,意味着多次执行同一GET请求应该返回相同的结果,不会对服务器上的数据产生影响。

import requests

# 发送GET请求
response = requests.get('https://api.example.com/data')
print(response.text)  # 打印响应的文本内容

POST 请求

POST请求用于向服务器提交数据,通常用于创建新的资源。与GET请求不同,POST请求不是幂等的,多次执行相同的POST请求可能会在服务器上创建多个资源。

import requests

# 准备要发送的数据
data = {'key': 'value'}

# 发送POST请求
response = requests.post('https://api.example.com/data', data=data)
print(response.json())  # 假设响应是JSON格式,打印JSON数据

 PUT 请求

PUT请求用于更新服务器上的现有资源。它是一种幂等操作,意味着多次执行相同的PUT请求应该产生相同的结果。

import requests

# 准备要更新的数据
data = {'key': 'new_value'}

# 发送PUT请求
response = requests.put('https://api.example.com/data/1', json=data)
print(response.status_code)  # 打印响应的状态码

DELETE 请求

DELETE请求用于从服务器删除资源。它也是一种幂等操作,多次执行相同的DELETE请求应该产生相同的结果。

import requests

# 发送DELETE请求
response = requests.delete('https://api.example.com/data/1')
print(response.status_code)  # 打印响应的状态码

其他考虑事项

  • 请求头(Headers):可以通过headers参数添加自定义的HTTP头信息。
  • 超时(Timeout):可以设置timeout参数来限制请求的最长等待时间。
  • 异常处理:使用try-except块来捕获如连接错误、超时等异常。
  • 会话(Session):使用requests.Session()可以跨请求保持某些参数,如Cookies。

这些基本的请求方法构成了与HTTP服务器交互的基础,是进行网络编程和API开发时的重要工具。通过合理使用这些方法,可以有效地与Web服务进行数据交换。

4. 高级功能

除了基本的请求发送,requests 还提供了一些高级功能,如会话管理、Cookies、代理、SSL 认证等。

会话管理

使用会话(Session)可以跨请求保持某些参数,如 Cookies。这对于需要登录的网页非常有用。

with requests.Session() as session:
    session.post('https://api.example.com/login', data={'username': 'user', 'password': 'pass'})
    response = session.get('https://api.example.com/protected_data')
    print(response.text)

Cookies 管理

requests 会自动处理 Cookies,但也允许手动管理。

cookies = {'session_token': '123456789'}
response = requests.get('https://api.example.com/data', cookies=cookies)

代理支持

在需要通过代理发送请求时,requests 也提供了代理支持。

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

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

5. 底层方法调用逻辑

requests 库的底层实现依赖于 urllib3,这是一个功能强大的 HTTP 客户端库。requests 通过封装 urllib3 的功能,提供了更简洁的 API。

  • 当你使用 requests.get 发送请求时,requests 会构建一个 Request 对象,然后使用 urllib3 的 PoolManager 发送请求。
  • urllib3 负责处理连接池、重试、SSL 认证等底层细节。
  • 响应数据通过 urllib3 返回给 requests,然后 requests 将其封装成 Response 对象,提供给用户。

6. 异常处理

requests 库提供了异常处理机制,可以捕获如连接错误、超时等异常。

try:
    response = requests.get('https://api.example.com/data', timeout=0.01)
except requests.exceptions.RequestException as e:
    print(e)

7.响应处理

一个完整的接口测试或HTTP通信讨论应该包括对响应的处理。在requests库中,发送请求后,库会返回一个Response对象,该对象包含了服务器响应的所有信息。以下是如何获取和处理这些响应信息的详细说明:

响应对象概览

当使用requests发送HTTP请求后,返回的Response对象包含以下主要属性:

  • status_code:服务器响应的状态码(如200, 404, 500等)。
  • text:服务器响应的原始内容,为字符串格式。
  • content:服务器响应的原始内容,为字节格式。
  • json():一个方法,如果响应是JSON格式,可以将其解析为Python字典。
  • headers:一个字典,包含响应头信息。
  • cookies:一个RequestsCookieJar对象,包含服务器发送的Cookies。

处理响应

以下是如何处理这些响应信息的示例:

检查状态码
response = requests.get('https://api.example.com/data')
if response.status_code == 200:
    print("请求成功!")
else:
    print("请求失败,状态码:", response.status_code)
读取响应内容
# 获取文本内容
print(response.text)

# 获取字节内容
print(response.content)
解析JSON响应

如果响应内容是JSON格式,可以使用json()方法将其解析为Python字典:

try:
    data = response.json()
    print(data)
except ValueError:
    print("响应内容不是有效的JSON格式")
访问响应头
# 获取所有响应头
print(response.headers)

# 获取特定的响应头
content_type = response.headers.get('Content-Type')
print("内容类型:", content_type)
处理Cookies
# 获取所有Cookies
print(response.cookies)

# 获取特定的Cookie
session_id = response.cookies.get('session_id')
print("Session ID:", session_id)

异常处理

在网络请求中,可能会遇到各种问题,如连接超时、DNS解析失败等。requests库提供了异常处理机制来捕获这些错误:

try:
    response = requests.get('https://api.example.com/data', timeout=0.01)
except requests.exceptions.RequestException as e:
    print("请求异常:", e)

当然大家如果看不懂,没事我们看点不正经的

全面熟练掌握 requests 库及其底层方法调用逻辑——通俗版-CSDN博客

  • 15
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值