Files
GitPilot/internal/proxy_darwin.go

83 lines
1.8 KiB
Go

//go:build darwin
package internal
import (
"fmt"
"os/exec"
"strings"
)
// readSystemProxy 从 macOS 系统偏好设置读取代理配置
// 使用 scutil --proxy 命令获取系统代理信息
func readSystemProxy(info *ProxyInfo) error {
out, err := exec.Command("scutil", "--proxy").Output()
if err != nil {
return fmt.Errorf("执行 scutil --proxy 失败: %w", err)
}
lines := strings.Split(string(out), "\n")
settings := make(map[string]string)
for _, line := range lines {
line = strings.TrimSpace(line)
parts := strings.SplitN(line, " : ", 2)
if len(parts) == 2 {
settings[strings.TrimSpace(parts[0])] = strings.TrimSpace(parts[1])
}
}
// 检查 HTTP 代理
if settings["HTTPEnable"] == "1" {
host := settings["HTTPProxy"]
port := settings["HTTPPort"]
if host != "" {
info.Enabled = true
info.Server = host
if port != "" && port != "0" {
info.Server = host + ":" + port
}
info.Protocol = "http"
}
}
// 检查 HTTPS 代理
if !info.Enabled && settings["HTTPSEnable"] == "1" {
host := settings["HTTPSProxy"]
port := settings["HTTPSPort"]
if host != "" {
info.Enabled = true
info.Server = host
if port != "" && port != "0" {
info.Server = host + ":" + port
}
info.Protocol = "http"
}
}
// 检查 SOCKS 代理
if !info.Enabled && settings["SOCKSEnable"] == "1" {
host := settings["SOCKSProxy"]
port := settings["SOCKSPort"]
if host != "" {
info.Enabled = true
info.Server = host
if port != "" && port != "0" {
info.Server = host + ":" + port
}
info.Protocol = "socks5"
}
}
// 如果通过以上方式检测到了代理,根据端口再次猜测协议
if info.Enabled && info.Server != "" {
info.Protocol = guessProtocol(info.Server)
}
// 读取绕过列表
if exceptions, ok := settings["ExceptionsList"]; ok {
info.Bypass = exceptions
}
return nil
}