Python requests 库实现网络请求、响应解析与异常处理
本文详解如何使用 Python requests 库发起 GET 与 POST 请求,正确解析响应头与 JSON 数据,安全下载远程文件,并结合 try-except 结构、超时设置与上下文管理器实现健壮的错误处理与资源清理。掌握这些核心步骤可大幅提升接口调用与数据抓取的稳定性。
Python requests 库进行网络请求与数据处理的核心流程
准备环境与基础协议认知
Web 通信基于 HTTP 协议,客户端通过请求行(方法、URL、版本)与请求头向服务器传递指令,服务器则返回状态码、响应头及响应体。常用方法包括 GET(获取资源)、POST(提交数据)、PUT(更新)与 DELETE(删除)。在使用 Python 发起请求前,需确保系统已安装 pip 包管理器,并在终端执行以下命令完成环境配置:
pip install requests
第1步:发送 GET 请求并提取关键信息
GET 请求适用于读取公开数据或查询列表。通过 requests.get() 传入目标 URL,可使用 params 字典自动拼接查询参数。返回的 Response 对象包含 status_code(状态码)、headers(响应头)与 text(文本内容)等属性,便于快速核对服务状态。
import requests
url = "https://httpbin.org/get"
params = {"search": "python", "page": 1}
response = requests.get(url, params=params)
print(f"状态码: {response.status_code}")
print(f"内容类型: {response.headers.get('Content-Type')}")
print(f"响应长度: {len(response.text)} 字符")
第2步:构造 POST 请求并解析 JSON 响应
当需要向服务器提交表单或上传数据时,使用 requests.post()。将字典赋值给 data 参数会自动转换为 application/x-www-form-urlencoded 格式。若服务器返回 JSON 数据,可直接调用 .json() 将其转为 Python 字典或列表,避免手动字符串切割。
import requests
url = "https://httpbin.org/post"
payload = {"username": "testuser", "action": "submit"}
response = requests.post(url, data=payload)
if response.status_code == 200:
data = response.json()
print("服务端确认:", data.get("form"))
第3步:安全下载文件至本地磁盘
获取二进制资源(如图片、压缩包)时,务必使用 response.content 配合文件的二进制写入模式('wb')。直接保存 response.text 会导致乱码或文件损坏。写入前建议先校验状态码,确保资源可访问后再执行落盘操作。
import requests
download_url = "https://www.example.com/resource.zip"
resp = requests.get(download_url)
if resp.status_code == 200:
with open("local_file.zip", "wb") as f:
f.write(resp.content)
print("文件已成功保存至本地路径")
else:
print(f"下载失败,错误码: {resp.status_code}")
第4步:建立异常拦截与自动化资源清理机制
网络请求极易受超时、DNS 解析失败或服务器宕机影响。为防程序崩溃,必须引入 try-except 结构。推荐使用 timeout 限制等待时间,配合 raise_for_status() 主动抛出非 2xx 状态的异常。对于文件句柄或连接池,强烈依赖 with 上下文管理器自动关闭资源,杜绝内存泄漏。
import requests
from requests.exceptions import Timeout, RequestException
try:
# 设置 5 秒超时上限
resp = requests.get("https://api.example.com/data", timeout=5)
# 触发 4xx/5xx 时主动抛出 HTTPError
resp.raise_for_status()
print("请求成功,正在处理数据...")
except Timeout:
print("网络请求超时,请检查延迟或重试")
except requests.HTTPError as http_err:
print(f"服务端报错: {http_err}")
except RequestException as req_err:
print(f"其他网络异常: {req_err}")
finally:
print("本次请求流程已执行完毕")
常见错误排查建议
若频繁遇到 ConnectionError,需检查代理设置或防火墙是否阻断请求;遇到 Timeout 可适当调整 timeout=(connect_timeout, read_timeout) 元组;若解析 .json() 报 JSONDecodeError,说明返回的并非标准 JSON 格式(可能是 HTML 警告页),应先打印 response.text 定位根因。始终使用条件判断(如 os.path.exists())替代盲目覆盖写入,可有效降低误删风险。
以上就是 Python 实现 Web 请求与响应处理的详细内容,更多关于 Python 网络编程与 API 调用的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









