Chrome DevTools扩展无法获取响应体,iCloud流量监控仅获URL无数据
问题分析与解决方案
核心问题定位
你的代码存在几个关键问题导致无法获取响应数据:
- 请求方法判断错误:
FETCH不是标准HTTP请求方法,Fetch API发起的请求实际还是用GET/POST这类方法,这个错误判断会漏处理请求或误判。 - 响应内容获取方式错了:
request.getContent()的回调参数body才是响应内容,request.response.content.text不一定存在,尤其在响应未完全解析或类型不匹配时。 - 无域名过滤:当前会监听所有请求,没限定只处理
icloud.com域名,产生冗余数据。 no-cors模式限制:这个模式会禁用请求的很多功能,甚至导致请求发送失败,本地服务器完全不需要它。
修改后的devtools.js代码
chrome.devtools.network.onRequestFinished.addListener(request => { // 只处理icloud.com域名的请求 if (!request.request.url.includes('icloud.com')) return; // 获取响应内容 request.getContent((body, encoding) => { // 只处理需要的请求方法,按需调整 const allowedMethods = ['POST', 'GET']; if (!allowedMethods.includes(request.request.method)) return; // 组装发送数据,body就是响应内容 const data = new URLSearchParams(); data.set('ig', JSON.stringify({ url: request.request.url, method: request.request.method, responseData: body || '无响应内容' })); // 发送到PHP脚本,移除no-cors模式 fetch("http://localhost:1609/icl.php", { method: 'POST', cache: 'no-cache', headers: { 'Content-Type': 'application/x-www-form-urlencoded', }, body: data }).then(response => { if (!response.ok) { console.error('发送数据失败:', response.status); } }).catch(err => { console.error('请求错误:', err); }); }); });
关键修改说明
- 域名过滤:通过
includes('icloud.com')只处理目标域名请求,减少无效处理。 - 正确拿响应内容:用
request.getContent()回调的body参数,这是DevTools API规定的获取响应内容的方式。 - 修正请求方法判断:去掉错误的
FETCH,改用实际的HTTP方法列表,按需添加。 - 移除
no-cors:该模式会限制请求功能,本地服务器不需要,移除后可正常处理请求并查看状态。 - 增加错误处理:添加
catch和响应状态判断,方便调试发送失败的情况。
PHP脚本优化(可选)
可以加数据校验,避免空数据或无效JSON写入:
<?php if (isset($_POST['ig'])) { $aj = $_POST['ig']; $data = json_decode($aj, true); if ($data) { $logLine = date("Y-m-d H:i:s") . ": " . json_encode($data, JSON_UNESCAPED_SLASHES) . "\n"; file_put_contents('icl.txt', $logLine, FILE_APPEND); } } ?>
额外注意事项
- 必须打开Chrome DevTools,DevTools扩展只有在DevTools启动时才会生效。
- 调试时可以看DevTools的Console面板,里面会显示请求错误信息,方便排查问题。
- 如果响应是二进制类型(比如图片),
body会是Base64字符串,可以通过encoding参数判断类型再处理。
内容的提问来源于stack exchange,提问作者byteflush
相关产品推荐
相关产品推荐

