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 参数使用")
}
相关推荐
lijfrank12 小时前
Mac卸载NTFS工具后无法读取硬盘?我的2天排错心路与终极解决方案
macos·ntfs
吃鱼的灰太狼17 小时前
Mac本地部署大模型|Ollama+Gemma4/Qwen3.5新手零失败教程,彻底告别Token消耗✨
macos
代码的小搬运工17 小时前
Masonry学习
学习·macos·cocoa
yangSnowy18 小时前
mac系统安装hyperf框架swoole扩展
后端·macos·swoole
EVE จุ๊บ2 天前
如何修改mac上的jmeter堆内存
jmeter·macos
老蒋每日coding2 天前
Node.js 安装指南(Mac 版本)
macos·node.js
AI玫瑰助手2 天前
Python入门:Windows/macOS/Linux系统安装Python教程
windows·python·macos
智算菩萨2 天前
OpenAI Codex 国内使用完全指南:Windows/macOS/Linux 三平台详细安装配置教程(现在最新的有gpt-5.3-codex和gpt-5.4)
linux·windows·gpt·macos·ai·ai编程·codex
AAI机器之心2 天前
在 macOS 上本地部署 Ollama + LLaMA3(附教程)
人工智能·macos·langchain·llm·知识库·大模型部署
HSTK2 天前
Mac上配置PlatformIO
macos