Python Requests 模块基础用法与二次封装指南
本文详细介绍 Python requests 模块的标准用法与二次封装方法。通过基础示例掌握 GET/POST 请求与响应对象各属性的获取方式,结合第三方 retrying 库编写具备自动重试功能的 HTTP 请求类,提供稳定高效的 API 调用方案。
Requests 模块与 HTTP 请求类型
Python 内置的 urllib 模块功能强大但语法较为繁琐,而 requests 在其基础上进行了高度封装,大幅简化了网络请求流程,使开发者能更直观地完成浏览器级的操作。支持的 HTTP 方法包含 POST、GET、PUT、DELETE、HEAD 以及 OPTIONS,其中 GET 和 POST 在日常 API 交互中使用最为频繁。
标准请求发送与响应对象解析
导入 import requests 后,直接调用对应方法向目标 URL 发起请求即可。每次调用都会返回一个 response 对象,该对象携带完整的响应元数据:
response.text:获取文本响应内容(网页源码,str 格式)response.content:获取二进制响应内容(bytes 格式)response.json():直接反序列化 JSON 响应内容response.raw:获取底层原始响应流response.status_code:HTTP 状态码,返回 200 表示请求成功response.encoding:显式指定的编码格式response.apparent_encoding:从响应内容中推导出的编码格式response.request:当前请求对象,包含 url、method、headers 等信息response.url:实际发送请求的最终网址(含拼接后的查询参数)
基础调用与结果提取示例:
# 导入 requests 包
import requests
# 发送请求
response = requests.get('https://www.runoob.com/')
# 打印关键信息
print(response.status_code) # 获取响应状态码
print(response.headers) # 获取响应头
print(response.text[:100]) # 截取前100字符查看源码
高可用 Requests 封装实现
在自动化测试或批量任务中,网络波动容易导致单次请求失败。借助 retrying 库(需通过 pip install retrying 安装),可快速构建具备自动重试能力的请求类,减少业务层的异常处理负担。
import requests
import json
import retrying
class HTTP(object):
"""
requests 二次封装示例:
# 调用方式参考
headers = {
"Content-Type": "application/json",
"Charset": "UTF-8"
}
result = HTTP.get(url, params)
result = HTTP.post(url, data=json.dumps(payload), headers=headers)
"""
@staticmethod
def __requests(method, url, **kwargs):
"""
核心请求分发器
@param method: http 请求方法 (get/post/put/delete/head/patch)
@param url: 接口地址
@param kwargs: requests 原生支持的关键字参数
@return: 解析后的 JSON 数据
"""
resp = getattr(requests, method)(url, **kwargs)
if resp.status_code == 200:
return resp.json()
raise Exception('fail:{},url:{},method:{}'.format(
json.dumps(resp.content), url, method))
@retrying.retry(stop_max_attempt_number=3)
def get(self, url, params=None, **kwargs):
return self.__requests('get', url, params=params, **kwargs)
@retrying.retry(stop_max_attempt_number=3)
def post(self, url, data, **kwargs):
return self.__requests('post', url, data=data, **kwargs)
@retrying.retry(stop_max_attempt_number=3)
def put(self, url, data=None, **kwargs):
return self.__requests('put', url, data=data, **kwargs)
@retrying.retry(stop_max_attempt_number=3)
def delete(self, url, **kwargs):
return self.__requests('delete', url, **kwargs)
@retrying.retry(stop_max_attempt_number=3)
def head(self, url, **kwargs):
return self.__requests('head', url, **kwargs)
@retrying.retry(stop_max_attempt_number=3)
def patch(self, url, data=None, **kwargs):
return self.__requests('patch', url, data=data, **kwargs)第1步:处理 GET 请求的参数拼接
URL 查询字符串常以 ?key=val 形式出现。直接使用字典配合 params 参数即可自动完成拼接,无需手动处理 & 符号。注意字典值为 None 的键会被自动忽略,列表值会按规范展开。
condition_params = {'k1': 'v1', 'k2': 'v2', 'k3': None, 'k4': ['v4', 'v5']}
r = requests.get('http://httpbin.org/get', params=condition_params)
print(r.url) # 输出: http://httpbin.org/get?k1=v1&k2=v2&k4=v4&k4=v5
第2步:构造 POST 请求的 JSON 数据体
当服务端要求 application/json 格式时,需将字典序列化为 JSON 字符串,并通过 headers 明确指定 Content-Type,最后使用 data 参数传递。
import json
url = 'https://api.github.com/some/endpoint'
payload = {'some': 'data'}
headers = {'content-type': 'application/json'}
res = requests.post(url, data=json.dumps(payload), headers=headers)免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









