Python使用requests库发送请求的核心方法与Session管理
Python 使用 requests 库可大幅简化 HTTP 网络请求操作。本文演示如何直接调用模块方法发起 GET 与 POST 请求,利用 Session 对象自动维护 Cookie 与会话状态,并结合 try-except 结构精准捕获超时、断连与 HTTP 错误。掌握这些核心用法,能够快速搭建稳定高效的接口调用流程。
准备环境与运行目标
目标是在 Python 项目中实现稳定、高效的网络请求。首先确保已安装 requests 库,并准备待调用的 API 地址。该库底层封装了 urllib3,提供更符合直觉的 API 设计。
第1步:发起基础 HTTP 请求
requests 库通过映射标准 HTTP 动词提供简洁的调用方式。直接调用对应函数即可获取包含响应数据的对象。
import requests
# 发送 GET 请求获取数据
r = requests.get('https://httpbin.org/get')
print(r.status_code) # 查看响应状态码
print(r.headers) # 查看响应头信息
print(type(r)) # 确认返回对象类型为 requests.models.Response
返回值 r 为 Response 类型实例,可直接访问 .status_code(状态码)、.text(文本内容)、.json()(解析JSON数据)及 .headers(响应头)。除 GET 外,其余常见方法调用逻辑一致:
# 发送 POST 请求携带表单数据
r = requests.post('https://httpbin.org/post', data={'key': 'value'})
# 发送 PUT 请求更新资源
r = requests.put('https://httpbin.org/put', data={'key': 'value'})
# 发送 DELETE 请求删除资源
r = requests.delete('https://httpbin.org/delete')
# 发送 HEAD 仅获取响应头
r = requests.head('https://httpbin.org/get')
第2步:使用 Session 管理会话状态
原生 HTTP 协议是无状态的,服务器需依靠标识符区分不同请求来源。手动在每个请求中重复传递 Cookie 既繁琐又易出错。requests.Session() 能够自动跨请求维持同一 TCP 连接、缓存请求数据并同步保存服务器下发的 Cookie,显著提升后续交互效率。
import requests
s = requests.Session()
# 首次建立连接并获取初始数据
s.get('https://httpbin.org/get')
# 设置自定义 Cookie(可选,通常由 Session 自动接管)
s.cookies.set('session_token', 'your_value_here')
# 统一更新请求头,模拟浏览器或特定客户端环境
s.headers.update({
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)',
'Accept': 'application/json'
})
完成上述初始化后,后续通过 s.get() 或 s.post() 发出的请求将自动复用连接池并携带已配置的会话状态,无需再次手动注入参数。
异常处理与常见问题排查
网络请求受环境波动影响极易中断,合理的异常捕获能避免程序崩溃。推荐使用 try...except 结合内置的状态检查方法。
import requests
try:
response = requests.get('https://httpbin.org/get', timeout=5)
# 若状态码为 4xx 或 5xx,主动抛出 HTTPError 异常
response.raise_for_status()
except requests.exceptions.HTTPError as e:
print(f'HTTP 请求失败: {e}')
except requests.exceptions.ConnectionError as e:
print(f'网络连接中断: {e}')
except requests.exceptions.Timeout as e:
print(f'请求超时: {e}')
except requests.exceptions.RequestException as e:
print(f'发生未知请求异常: {e}')
timeout参数限制等待时间,防止线程阻塞。raise_for_status()用于拦截非 200 成功状态码。- 捕获顺序建议从具体异常到通用基类
RequestException,确保精准定位故障源。实际对接中,若频繁遭遇ConnectionError,请检查代理配置或目标服务存活状态。
总结
以上就是Python使用requests库发送请求的详细教程,更多关于Python网络请求与接口调用的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









