Python使用requests库发送请求的核心方法与Session管理

陈默
陈默
发布时间:2026-10-11| 3人浏览过
原创

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网络请求与接口调用的资料请关注本站其它相关文章!

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。