Mac 重启电脑导致代理失效

Mac 重启后代理失效导致浏览器无法访问

相信有些朋友和我一样,使用 Mac 时直接关机导致代理没有关闭

重启之后,访问浏览器直接不通。可以参考如下, 二选其一使用

系统设置

ini 复制代码
设置 > WIFI > 连接的 WIFI > 代理

程序设置

  • 直接使用,不编译
shell 复制代码
go run . down # 关闭
go run . up # 开启
  • 编译后使用
shell 复制代码
go build -o proxy-mac .
go 复制代码
package main

import (
	"flag"
	"fmt"
	"os"
	"os/exec"
	"strings"
)

const (
	defaultProxyHost      = "127.0.0.1"
	defaultProxyPort      = "7889"
	defaultNetworkService = "Wi-Fi"
)

type ProxyManager interface {
	EnableHTTPProxy(host, port string) error
	DisableHTTPProxy() error
	GetHTTPProxy() (string, error)
}

type MacProxyManager struct {
	service string
}

func NewMacProxyManager(service string) *MacProxyManager {
	return &MacProxyManager{service: service}
}

func (m *MacProxyManager) EnableHTTPProxy(host, port string) error {
	if err := exec.Command("networksetup", "-setwebproxy", m.service, host, port).Run(); err != nil {
		return fmt.Errorf("设置 HTTP 代理失败: %w", err)
	}
	if err := exec.Command("networksetup", "-setwebproxystate", m.service, "on").Run(); err != nil {
		return fmt.Errorf("开启 HTTP 代理失败: %w", err)
	}
	return nil
}

func (m *MacProxyManager) DisableHTTPProxy() error {
	if err := exec.Command("networksetup", "-setwebproxystate", m.service, "off").Run(); err != nil {
		return fmt.Errorf("关闭 HTTP 代理失败: %w", err)
	}
	return nil
}

func (m *MacProxyManager) GetHTTPProxy() (string, error) {
	out, err := exec.Command("networksetup", "-getwebproxy", m.service).CombinedOutput()
	if err != nil {
		return "", fmt.Errorf("读取 HTTP 代理失败: %w", err)
	}
	return string(out), nil
}

func main() {
	upCmd := flag.NewFlagSet("up", flag.ExitOnError)
	downCmd := flag.NewFlagSet("down", flag.ExitOnError)
	checkCmd := flag.NewFlagSet("check", flag.ExitOnError)
	setCmd := flag.NewFlagSet("set", flag.ExitOnError)
	setProxy := setCmd.String("proxy", fmt.Sprintf("%s:%s", defaultProxyHost, defaultProxyPort), "代理地址,格式为 host:port")

	proxy := NewMacProxyManager(defaultNetworkService)

	if len(os.Args) < 2 {
		echoHelp()
		return
	}

	switch os.Args[1] {
	case "up":
		upCmd.Parse(os.Args[2:])
		if err := proxy.EnableHTTPProxy(defaultProxyHost, defaultProxyPort); err != nil {
			fmt.Println("❌", err)
			return
		}
		printStatus(proxy)
	case "down":
		downCmd.Parse(os.Args[2:])
		if err := proxy.DisableHTTPProxy(); err != nil {
			fmt.Println("❌", err)
			return
		}
		printStatus(proxy)
	case "check":
		checkCmd.Parse(os.Args[2:])
		printStatus(proxy)
	case "set":
		setCmd.Parse(os.Args[2:])
		parts := strings.Split(*setProxy, ":")
		if len(parts) != 2 {
			fmt.Println("❌ 代理地址格式错误,应为 host:port")
			return
		}
		if err := proxy.EnableHTTPProxy(parts[0], parts[1]); err != nil {
			fmt.Println("❌", err)
			return
		}
		printStatus(proxy)
	default:
		echoHelp()
	}
}

func printStatus(proxy ProxyManager) {
	status, err := proxy.GetHTTPProxy()
	if err != nil {
		fmt.Println("❌", err)
		return
	}
	fmt.Println("当前代理配置:\n", status)
}

func echoHelp() {
	fmt.Println("Usage: go run . [up|down|check|set]")
	fmt.Printf("\tup\t开启默认 HTTP 代理 (%s:%s)\n", defaultProxyHost, defaultProxyPort)
	fmt.Println("\tdown\t关闭 HTTP 代理")
	fmt.Println("\tcheck\t查询当前 HTTP 代理配置")
	fmt.Println("\tset\t设置指定的 HTTP 代理,需配合 -proxy 参数使用")
}
相关推荐
普通网友15 分钟前
苹果笔记本(Mac)连接手机完全指南
macos·智能手机
Aftery的博客2 小时前
Xcode运行报错:SDK does not contain ‘libarclite‘ at the path
macos·cocoa·xcode
楚轩努力变强9 小时前
iOS 自动化环境配置指南 (Appium + WebDriverAgent)
javascript·学习·macos·ios·appium·自动化
猫头虎1 天前
如何解决 OpenClaw “Pairing required” 报错:两种官方解决方案详解
网络·windows·网络协议·macos·智能路由器·pip·scipy
皮卡车厘子2 天前
Mac 挂载目录
macos
良逍Ai出海2 天前
在 Windows & macOS 上安装 Claude Code,并使用第三方 Key 的完整教程
windows·macos
热爱生活的五柒2 天前
linux/mac/wsl如何使用claude code,并配置免费的硅基流动API?(官方的需要付费订阅)
linux·运维·macos
胖胖大王叫我来巡山2 天前
mac本地安装DataEase桌面版
macos
奋斗者1号2 天前
OpenClaw 部署方式对比:云端、WSL、Mac 本机、Ubuntu 虚拟机(2026年2月最新主流实践)
linux·ubuntu·macos
玉梅小洋2 天前
Android SDK 安装指南(MacOS 和 Windows)
android·windows·macos·sdk