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 参数使用")
}
相关推荐
fei_sun1 小时前
RIB、FIB、MAC 、ARP 表
服务器·网络·macos
Highcharts.js5 小时前
如何在macOS桌面应用集成Highcharts
macos·highcharts·前端可视化·交互图表
zaemyn20206 小时前
macOS 上 AccessClient 无法唤起?排查 Python 架构与 Windows App 识别问题
windows·python·macos·远程桌面·accessclient
应用市场1 天前
把旧 Pixel 变成相册备份中转站(上):Mac 到安卓的照片传输工具设计——流式上传、sha256 校验、adb forward 与 Bonjour
android·macos·adb·kotlin·swift
Peter(阿斯拉)2 天前
[macOS Tahoe 26]_[使用SmartSVN访问库路径报错的问题]
macos·svn·tahoe·smartsvn·macos26
andyweike2 天前
iOS语法原理
macos·objective-c·cocoa
传奇开心果编程3 天前
【SwiftUI提高练中学】第8课 网络层架构:拦截器、重试、缓存与离线优先
学习·macos·ui·ios·swiftui
xUxIAOrUIII3 天前
日常笔记-1005-1
linux·笔记·python·macos
传奇开心果编程3 天前
【Compose Multiplatform 跨端开发学与练】第9课 测试与调试
android·学习·macos·ios·kotlin·web·composer
supabc1233 天前
Celium:连接 Windows、Mac、Linux 与 Android,让远程访问和设备管理更简单
android·linux·windows·macos·远程访问·网络管理·celium