在运维巡检、接口可用性校验等场景中,检测网页运行状态是一项常见需求。通过Python的requests模块发送HTTP请求,再配合异常处理机制,可以覆盖网络不通、请求超时、返回状态码异常等多种情况,实现可靠的网页状态监控功能。
实现前的环境准备
首先需要确保本地已经安装Python环境,然后安装requests模块,执行以下命令即可完成安装:
pip install requests
核心实现逻辑
整个监控流程分为三个核心步骤:发送HTTP请求、捕获请求过程中的异常、校验返回的状态码。下面分模块介绍具体实现方式。
1. 基础请求与状态码校验
使用requests模块的get方法发送请求,然后判断返回的状态码是否为200,这是最基础的检测逻辑:
import requests
def check_web_status_basic(url):
try:
# 发送GET请求,设置超时时间为5秒
response = requests.get(url, timeout=5)
# 判断状态码是否为200
if response.status_code == 200:
return True, "网页运行正常"
else:
return False, f"网页返回异常状态码:{response.status_code}"
except Exception as e:
return False, f"请求过程出现异常:{str(e)}"
# 测试示例
result, msg = check_web_status_basic("https://ipipp.com")
print(f"检测结果:{result},提示信息:{msg}")
2. 完善异常处理覆盖更多场景
实际请求过程中会出现多种异常,比如网络连接失败、DNS解析错误、请求超时等,需要对这些异常分别处理,让监控结果更准确:
import requests
from requests.exceptions import Timeout, ConnectionError, HTTPError, RequestException
def check_web_status_advanced(url):
try:
# 发送请求,设置超时时间
response = requests.get(url, timeout=5)
# 主动抛出HTTP错误,比如4xx、5xx状态码
response.raise_for_status()
return True, "网页运行正常"
except Timeout:
return False, "请求超时,网页响应过慢"
except ConnectionError:
return False, "网络连接失败,无法访问目标地址"
except HTTPError as e:
return False, f"HTTP请求错误:{str(e)}"
except RequestException as e:
return False, f"其他请求异常:{str(e)}"
# 测试不同场景
test_urls = [
"https://ipipp.com", # 正常地址
"http://192.168.0.1", # 内网地址示例
"https://invalid.url.test" # 无效地址
]
for url in test_urls:
result, msg = check_web_status_advanced(url)
print(f"地址:{url},结果:{result},信息:{msg}")
3. 批量监控与结果记录
如果需要同时监控多个网页,可以扩展脚本实现批量检测,并且将结果保存到文件中:
import requests
from requests.exceptions import Timeout, ConnectionError, HTTPError, RequestException
import time
def batch_check_web(urls, log_file="web_status.log"):
with open(log_file, "a", encoding="utf-8") as f:
for url in urls:
check_time = time.strftime("%Y-%m-%d %H:%M:%S")
try:
response = requests.get(url, timeout=5)
response.raise_for_status()
log_line = f"{check_time} | {url} | 正常 | 状态码:{response.status_code}n"
except Timeout:
log_line = f"{check_time} | {url} | 异常 | 请求超时n"
except ConnectionError:
log_line = f"{check_time} | {url} | 异常 | 连接失败n"
except HTTPError as e:
log_line = f"{check_time} | {url} | 异常 | HTTP错误:{str(e)}n"
except RequestException as e:
log_line = f"{check_time} | {url} | 异常 | 其他异常:{str(e)}n"
print(log_line.strip())
f.write(log_line)
# 批量检测示例
target_urls = [
"https://ipipp.com",
"http://127.0.0.1:8080",
"https://www.baidu.com"
]
batch_check_web(target_urls)
注意事项
- 请求超时时间需要根据目标网页的实际响应速度调整,避免误判正常但响应慢的网页
- 如果目标网页需要登录或者携带特定请求头,可以在requests.get方法中添加headers参数
- 高频监控时建议添加请求间隔,避免对目标服务器造成过大压力
- 对于需要校验内容而非仅状态码的场景,可以额外添加响应内容的关键字校验逻辑
常见问题说明
如果检测本地服务比如http://127.0.0.1:8080时返回连接失败,首先确认本地服务是否已经启动,端口是否正确。如果检测内网地址http://192.168.0.1失败,需要确认当前设备是否和目标内网地址处于同一网络环境。
提示:实际生产环境中可以结合定时任务工具,比如Linux的crontab或者Windows的任务计划程序,让监控脚本定期执行,实现自动化的网页状态巡检。
Pythonrequests模块网页状态检测异常处理网络监控修改时间:2026-07-24 09:06:35