macOS 手动配置网络代理需通过 UUID 定位 preferences.plist 中对应 NetworkServices 节点,优先用 defaults 写入 Proxies 键值,辅以 PlistBuddy 处理深层嵌套,最后用 networksetup 和 curl 验证生效。

如果您需要在 macOS 系统中通过手动编辑代理配置文件(plist)实现网络代理的精确控制或批量部署,可能因系统签名机制、权限限制或键值格式错误导致配置不生效。以下是完成该任务的具体操作路径与关键参数注入方法:
一、定位并获取目标 plist 文件
macOS 的网络代理设置存储于用户偏好设置目录下的特定 plist 文件中,该文件由系统网络服务标识符命名,需先确认当前活跃服务的 UUID 并定位对应路径。直接修改错误路径的 plist 将无法影响实际代理行为。
1、打开终端,执行 networksetup -listallnetworkservices 查看所有网络服务名称。
2、执行 networksetup -getinfo "Wi-Fi"(将 Wi-Fi 替换为实际服务名)获取该服务的硬件端口和是否启用 DHCP。
3、执行 networksetup -listnetworkserviceorder 提取对应服务的 UUID 字符串(形如 8A9F3C1E-2B4D-5F6A-8C9B-1D2E3F4A5B6C)。
4、拼接完整路径:~/Library/Preferences/SystemConfiguration/preferences.plist,此为全局网络配置主文件,代理参数嵌套在其中的 NetworkServices 字典内对应 UUID 键下。
二、使用 defaults 命令安全写入代理参数
直接编辑 preferences.plist 易引发 XML 格式损坏或权限丢失,推荐使用 macOS 内置 defaults 工具注入键值对,该工具自动处理序列化、权限继承与 CFPreferences 同步。
1、启用 HTTP 代理:执行 defaults write /Library/Preferences/SystemConfiguration/preferences.plist 'NetworkServices' -dict-add '8A9F3C1E-2B4D-5F6A-8C9B-1D2E3F4A5B6C' -dict 'Proxies' -dict 'HTTPEnable' -int 1 'HTTPPort' -int 8080 'HTTPProxy' -string '127.0.0.1'(请将 UUID 和代理地址替换为实际值)。
2、启用 HTTPS 代理:在同一条命令中追加 'HTTPSProxy' -string '127.0.0.1' 'HTTPSPort' -int 8080 'HTTPSEnable' -int 1。
3、设置代理排除列表:添加 'ExceptionsList' -array 'localhost' '127.0.0.1' '*.local'。
4、强制刷新配置:执行 killall cfprefsd 清除偏好设置缓存,再运行 networksetup -detectnewhardware 触发重载。
三、通过 PlistBuddy 手动修改嵌套字典结构
当需要向已存在的代理字典中追加非标准键(如 SOCKSProxyUID、ProxyAutoConfigEnable),或处理 defaults 无法覆盖的深层嵌套路径时,PlistBuddy 提供更细粒度的节点操作能力,避免全量重写风险。
1、创建临时副本防止误操作:cp ~/Library/Preferences/SystemConfiguration/preferences.plist ~/Desktop/preferences_backup.plist。
2、启动交互式编辑:/usr/libexec/PlistBuddy -x -c "Print" ~/Library/Preferences/SystemConfiguration/preferences.plist | head -n 20 验证顶层结构。
3、进入目标路径:/usr/libexec/PlistBuddy -c "Set :NetworkServices:8A9F3C1E-2B4D-5F6A-8C9B-1D2E3F4A5B6C:Proxies:ProxyAutoConfigEnable 1" ~/Library/Preferences/SystemConfiguration/preferences.plist。
4、注入 PAC URL:/usr/libexec/PlistBuddy -c "Add :NetworkServices:8A9F3C1E-2B4D-5F6A-8C9B-1D2E3F4A5B6C:Proxies:ProxyAutoConfigURLString string 'http://proxy.example.com/proxy.pac'" ~/Library/Preferences/SystemConfiguration/preferences.plist。
四、验证代理参数是否正确加载
系统不会实时校验 plist 中代理键的逻辑有效性,必须通过独立于 GUI 的命令行工具确认参数已实际注入并被网络栈识别,避免出现“文件已改但代理未启用”的静默失败。
1、导出当前服务代理状态:networksetup -getwebproxy "Wi-Fi"(输出应包含 Enabled: Yes 及对应服务器与端口)。
2、检查底层配置一致性:defaults read /Library/Preferences/SystemConfiguration/preferences.plist NetworkServices | grep -A 10 "8A9F3C1E-2B4D-5F6A-8C9B-1D2E3F4A5B6C"。
3、测试代理连通性:curl -I --proxy http://127.0.0.1:8080 https://httpbin.org/ip(若返回 200 且响应头含 Via 字段,表明流量经代理转发)。
4、排查证书信任问题:security find-certificate -p /System/Library/Keychains/SystemRootCertificates.keychain | grep -q "Proxy" 判断是否已导入自定义代理 CA 证书。

















