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 参数使用")
}
相关推荐
sweethhheart2 天前
【typora激活使用】mac操作方式
前端·数据库·macos
库奇噜啦呼2 天前
【iOS】简单的四则运算
macos·ios·cocoa
HoJunjie3 天前
macOS sequoia 15.7.1 源码安装node14,并加入nvm管理教程
macos·node.js
心灵宝贝3 天前
Principal v6.15 中文汉化版安装教程|Mac .dmg 文件安装步骤详解
macos
你好龙卷风!!!3 天前
mac | Windows 本地部署 Seata1.7.0,Nacos 作为配置中心、注册中心,MySQL 存储信息
windows·mysql·macos
源文雨3 天前
MacOS 下 Warp ping 局域网设备报错 ping: sendto: No route to host 的解决方法
运维·网络协议·安全·macos·网络安全·ping
liulilittle3 天前
macOS 内核路由表操作:直接 API 编程指南
网络·c++·macos·策略模式·路由·route·通信
QQ12958455044 天前
Mac添加全局变量
开发语言·macos
Everbrilliant895 天前
Xcode上编译调试ffmpeg
macos·ffmpeg·xcode·ffmpeg源码编译工具·xcode调试ffmpeg源码·ffmpeg工具环境变量配置