如何监控网络请求并针对特定内容触发自定义异常
网络请求监控与异常告警方案
核心需求
监控所有网络请求的URL、参数、请求体及响应数据,当请求/响应中出现特定内容(如示例中的undefined无效值)时,触发通知或自定义异常。
浏览器端拦截实现(适配动态Ajax场景)
针对Web应用的动态Ajax请求,可通过Tampermonkey油猴脚本实现请求拦截与检测,完全支持用户交互场景:
- 安装Tampermonkey浏览器插件
- 新建用户脚本,写入以下拦截逻辑(适配
XMLHttpRequest和fetch请求):
// ==UserScript== // @name 请求异常监控脚本 // @match http://localhost:8080/* // @grant none // ==/UserScript== (function() { 'use strict'; // 拦截XMLHttpRequest const originalXHRopen = XMLHttpRequest.prototype.open; XMLHttpRequest.prototype.open = function(method, url) { // 检测URL中的无效参数 if (url.includes('undefined=')) { alert(`检测到异常请求URL:${url}`); // 触发自定义异常 throw new Error(`无效请求参数:undefined`); } this.addEventListener('load', function() { // 检测响应数据 try { const responseData = JSON.parse(this.responseText); if (responseData.hasOwnProperty('undefined')) { console.error(`检测到异常响应:`, responseData); alert(`响应中存在无效值:undefined`); } } catch(e) {} }); return originalXHRopen.apply(this, arguments); }; // 拦截fetch请求 const originalFetch = window.fetch; window.fetch = function(resource) { // 检测请求URL if (typeof resource === 'string' && resource.includes('undefined=')) { alert(`检测到异常fetch请求:${resource}`); throw new Error(`无效请求参数:undefined`); } return originalFetch.apply(this, arguments).then(response => { // 克隆响应以读取内容 response.clone().json().then(data => { if (data.hasOwnProperty('undefined')) { console.error(`检测到异常fetch响应:`, data); alert(`响应中存在无效值:undefined`); } }).catch(e => {}); return response; }); }; })();
- 脚本会自动在匹配的域名下运行,当请求URL包含
undefined=或响应JSON存在undefined字段时,触发弹窗告警并抛出异常。
系统层全局代理实现
如果需要监控整个操作系统的所有网络请求(不限于浏览器),可使用mitmproxy工具:
- 安装mitmproxy(支持Windows/macOS/Linux)
- 编写Python脚本
request_check.py实现检测逻辑:
from mitmproxy import http def response(flow: http.HTTPFlow) -> None: # 检测请求URL参数 if "undefined=" in flow.request.pretty_url: print(f"【异常告警】请求URL包含无效参数:{flow.request.pretty_url}") # 可扩展:发送邮件、本地弹窗等告警方式 # 检测响应数据 try: resp_data = flow.response.json() if "undefined" in resp_data: print(f"【异常告警】响应包含无效值:{resp_data}") except: pass
- 启动mitmproxy并加载脚本:
mitmproxy -s request_check.py
- 将系统/浏览器代理配置为
127.0.0.1:8080,所有请求会被mitmproxy拦截检测,控制台会输出异常告警,也可扩展实现邮件、桌面通知等告警方式。
内容的提问来源于stack exchange,提问作者Chris
相关产品推荐
相关产品推荐

