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 参数使用")
}
相关推荐
m0_535817552 小时前
macOS下Claude Code从0到1配置教程(附API密钥获取+常见报错修复)
gpt·macos·node.js·api·claude·claudecode·88api
一个人旅程~4 小时前
Windows的6月份安全启动证书过期如何查看是否过期是否需要更新如何操作
windows·经验分享·macos·电脑
Gh0stX5 小时前
macOS Burp Suite Professional 激活指南
macos
会Tk矩阵群控的小木5 小时前
imessage虚拟机群发系统搭建:基于UTM+Frida的完整实现与海外社媒集成
macos·ios·objective-c·cocoa·开源软件·个人开发·tk矩阵
风吹夏回5 小时前
保姆级教程:Dify 本地一键部署(Windows/Mac 通用)
windows·macos
安静轨迹10 小时前
计算机网络三大核心数据表:MAC 地址表、ARP 表、路由表(深度通俗完整版)
网络·计算机网络·macos
一勺菠萝丶10 小时前
Mac Homebrew 更新卡住怎么办?如何更换国内源、查看进度和安装软件
macos
春波petal1 天前
Mac nvm 永久固定 Node 版本(新开终端自动生效)
macos·nvm
小宋10211 天前
Mina Meeting Assistant 新手极速上手指南
ide·macos·ai·xcode·mina
AI创界者1 天前
ComfyUI v8 极致整合包发布!Win/Mac 双平台完美适配 + 多卡并行加速,开启 AI 绘画新时代
人工智能·macos