Networksetup代理与环境变量代理存在什么差异?
背景
用Proxyman抓包来分析一下CODEBUDDY、CLAUDE CODE与LLM之间的交互,如果是用Terminal的方式发现无法抓到,发现需要在环境变量里开启才行,所以就了解了下多种开启代理的区别。
两种方式的区别
有本质区别,作用范围完全不同:
networksetup— 系统级代理
修改的是macOS系统网络设置(等同于在「系统设置 → 网络 → 代理」里手动勾选)
立即生效,无需重启终端
影响范围:所有GUI应用(Safari、Chrome、Postman等)以及大多数遵循系统代理的程序
不影响终端里的命令行工具(curl、npm、pip、node 等默认不读系统代理)~/.zshrc环境变量 —Shell级代理
修改的是Shell进程的环境变量
需要重新source ~/.zshrc或开新终端才生效
影响范围:仅终端内的命令行工具(curl、npm、pip、git、node等)
不影响GUI应用
对比总结
| 对比项 | networksetup 系统代理 | ~/.zshrc 环境变量 |
|---|---|---|
| 作用对象 | GUI 应用 | 命令行工具 |
| 生效方式 | 立即生效 | 需 source 或新开终端 |
| Proxyman 抓包 | ✅ 能抓 GUI 流量 | ✅ 能抓终端流量 |
| curl / npm | ❌ 通常不走 | ✅ 走代理 |
| Chrome / Safari | ✅ 走代理 | ❌ 不走 |
结论
如果你用 Proxyman 抓 终端命令行工具(如 curl、npm 、install、node 发的请求)的包,必须设置 ~/.zshrc 环境变量,networksetup 对这些工具无效。
两者可以同时开启,互不冲突,Proxyman 本身也建议两者都配置。