VSCode 本身不抓包,需组合 Node 运行时、外部代理工具及代码层拦截逻辑;Node 环境须验证可用,请求须显式配置代理,调试应聚焦断点与变量检查,解析优先用结构化工具。

VSCode 本身不抓包,也不能直接拦截 fetch/axios/HTTP 请求;所谓“配置 Node 环境抓包”,本质是组合使用 Node 运行时 + 外部代理工具 + 代码层日志或拦截逻辑 —— 不理解这点,后续所有配置都会失效。
Node.js 环境必须先验证可运行且路径正确
VSCode 不自带 Node,它只调用系统已安装的 node 可执行文件。如果 node --version 在终端报错,或 VSCode 调试时报 Cannot find runtime 'node',说明环境没通。
- 在终端运行
which node(macOS/Linux)或where node(Windows),确认路径存在 - 打开 VSCode 设置 → 搜索
Node Executable Path→ 填入上一步拿到的完整路径(如/usr/local/bin/node或C:\Program Files\nodejs\node.exe) - 新建
test.js,写console.log(process.version),按Ctrl+Shift+P→ “Run Without Debugging”,看输出是否正常
Node 层抓包必须显式走代理,否则 mitmproxy/Charles 不生效
浏览器会自动读取系统代理设置,但 Node.js 默认完全忽略。你启动了 mitmproxy -p 8080,却在代码里调 axios.get('https://api.example.com'),请求根本不会经过代理 —— 这是最常卡住人的点。
根据 package.json 中的 engines 字段自动检测 Node.js 版本需求,未安装 nvm 时自动安装并切换至对应版本。支持 Windows、macOS、Linux。适用于 Node.js 项目开发、版本切换和环境配置。
- 在代码开头加:
process.env.HTTP_PROXY = 'http://127.0.0.1:8080'; process.env.HTTPS_PROXY = 'http://127.0.0.1:8080'; - 使用
node-fetch时需传agent实例(HttpsProxyAgent),不能只靠环境变量 - 若用
axios,要配proxy: false关闭内置代理逻辑,再手动设http.Agent,否则可能双重代理失败 - 检查 mitmproxy 控制台:没流量进来?先确认 Node 进程是否真的加载了上述环境变量(
console.log(process.env.HTTP_PROXY))
VSCode 中调试网络请求,关键在断点 + 日志 + 响应体检查
你不需要让 VSCode 显示 Network 面板,而是要在请求发出前后停住、看清参数和返回值。这比看代理工具里的 raw body 更贴近业务逻辑。
- 在
fetch或axios.request()调用前打断点,展开config.url、config.headers、config.data查实际发了什么 - 在
.then(res => { ... })或async/await后打断点,检查res.data、res.status、res.headers - 对 Node.js 后端,直接在
app.post('/api', (req, res) => { ... })里 inspectreq.body和req.headers - 避免只看
console.log(res)—— 它可能被截断,用 VSCode 的 Variables 面板展开对象更可靠
提取数据阶段别硬写正则,优先用结构化解析器
如果你的抓包目标是 HTML 页面内容(比如爬取列表页),在 VSCode 里用 Python 或 Node 写解析逻辑,比在浏览器控制台里手动 copy 更可持续。
- Node 场景:用
cheerio(轻量 jQuery-like)而非原生String.indexOf,示例:const $ = cheerio.load(html); $('a.title').map((i, el) => $(el).text()).get() - Python 场景(配合 VSCode Python 扩展):用
BeautifulSoup+lxml,注意response.text是字符串,不是 bytes,别传错参数 - 遇到 JS 渲染内容(如 React SPA),Node +
playwright或puppeteer是唯一可行路径,requests拿不到真实 DOM - 所有解析代码都应在 VSCode 中启用调试:设断点 → 查看
$('...')返回是否为空 → 检查 selector 是否匹配 SSR 输出
真正难的从来不是装插件或敲命令,而是分清「谁在发请求」「谁在收响应」「谁该负责解析」—— VSCode 是调度中心,不是管道;Node 是执行引擎,不是抓包设备;代理工具是流量镜,不是代码 debugger。三者各司其职,才能把一次网络请求从发起、拦截、观察到提取,全链路串起来。

















