Networksetup代理与环境变量代理存在什么差异?

背景

Proxyman抓包来分析一下CODEBUDDYCLAUDE CODELLM之间的交互,如果是用Terminal的方式发现无法抓到,发现需要在环境变量里开启才行,所以就了解了下多种开启代理的区别。

两种方式的区别

有本质区别,作用范围完全不同:

  1. networksetup — 系统级代理
    修改的是 macOS 系统网络设置(等同于在「系统设置 → 网络 → 代理」里手动勾选)
    立即生效,无需重启终端
    影响范围:所有 GUI 应用(SafariChromePostman 等)以及大多数遵循系统代理的程序
    不影响终端里的命令行工具(curl、npm、pip、node 等默认不读系统代理)

  2. ~/.zshrc 环境变量 — Shell 级代理
    修改的是 Shell 进程的环境变量
    需要重新 source ~/.zshrc 或开新终端才生效
    影响范围:仅终端内的命令行工具(curlnpmpipgitnode 等)
    不影响 GUI 应用

对比总结

对比项 networksetup 系统代理 ~/.zshrc 环境变量
作用对象 GUI 应用 命令行工具
生效方式 立即生效 需 source 或新开终端
Proxyman 抓包 ✅ 能抓 GUI 流量 ✅ 能抓终端流量
curl / npm ❌ 通常不走 ✅ 走代理
Chrome / Safari ✅ 走代理 ❌ 不走

结论

如果你用 Proxyman 抓 终端命令行工具(如 curlnpminstallnode 发的请求)的包,必须设置 ~/.zshrc 环境变量,networksetup 对这些工具无效。
两者可以同时开启,互不冲突,Proxyman 本身也建议两者都配置。