Mac 使用Shuttle优雅切换http(s)代理

  |  
阅读次数
  |  
字数 972
  |  
时长 ≈ 4 分钟

MacOS中设置代理

MacOS中配置http(s)代理时,通常的做法是在系统偏好设置 - 网络中进行操作,选择一个网络,点击高级按钮,点击代理选项卡,分别勾选网页代理(HTTP)安全网页代理(HTTPS)然后填写上代理信息。

这种配置方式虽然可以实现需求,但缺点在于操作比较繁琐,特别是在需要频繁切换的情况下,效率极其低下。

基于该痛点,我们希望能避免重复操作,实现快速切换配置。

Terminal中设置代理

要避免在GUI进行重复的配置操作,比较好的简化方式是在Terminal中通过命令实现同样的功能。

事实上,在MacOS系统中的确是存在配置网络代理的命令,该命令即是networksetup

获取系统已有的网络服务

首先需要明确的是,macOS系统中针对不同网络服务(networkservice)的配置是独立的,因此在配置Web代理时需要进行指定。

而要获取系统中存在哪些网络服务,可以通过如下命令查看:

1
2
3
4
5
6
7
8
9
$ networksetup -listallnetworkservices 
An asterisk (*) denotes that a network service is disabled.
LPSS Serial Adapter (1)
LPSS Serial Adapter (2)
USB 10/100 LAN
iPhone USB
Wi-Fi
Bluetooth PAN
Thunderbolt Bridge

如果计算机是通过Wi-Fi上网的,那么我们设置网络代理时就需要指定Wi-Fi进行设置。

开启http(s)代理

通过networksetup命令对HTTP接口设置代理时,可以采用如下命令:

1
2
$ sudo networksetup -setwebproxy <networkservice> <domain> <port number> <authenticated> <username> <password>
# e.g. sudo networksetup -setwebproxy "Wi-Fi" 127.0.0.1 8080

执行该命令时,会开启系统的Web HTTP Proxy,并将Proxy设置为127.0.0.1:8080。

如果是对HTTPS接口设置代理时,命令为:

1
2
$ networksetup -setsecurewebproxy <networkservice> <domain> <port number> <authenticated> <username> <password>
# e.g. sudo networksetup -setsecurewebproxy "Wi-Fi" 127.0.0.1 8080

关闭http(s)代理

相应地,关闭HTTP和HTTPS代理的命令为:

1
2
3
4
5
$ sudo networksetup -setwebproxystate <networkservice> <on off>
# e.g. sudo networksetup -setwebproxystate "Wi-Fi" off

$ networksetup -setsecurewebproxystate <networkservice> <on off>
# e.g. sudo networksetup -setsecurewebproxystate "Wi-Fi" off

使用Shuttle一键设置代理

现在我们已经知道如何通过networksetup命令在Terminal中进行http(s)代理切换了,但如果每次都要重新输入命令和密码,还是会很麻烦,并没有真正地解决我们的痛点。

而且在实际场景中,我们通常需要同时开启或关闭代理,这类操作如此高频,要是还能通过点击一个按钮就实现切换,那就优雅多了。

幸运的是,这种优雅的方式还真能实现,只需要结合使用Shuttle这么一款小工具。

Shuttle,简而言之,它可以将一串命令映射到MacOS顶部菜单栏的快捷方式。我们要做的很简单,只需要将要实现的任务拼接成一条串行的命令即可,然后就可以在系统菜单栏中点击按钮运行整条命令。

例如,在Terminal中,要想在不手动输入sudo密码的情况下实现同时关闭代理,就可以通过如下串行命令实现。

1
$ echo <password> | sudo -S networksetup -setwebproxystate 'Wi-Fi' off && sudo networksetup -setsecurewebproxystate 'Wi-Fi' off

配置Shuttle

打开Shuttle配置文件,

编辑内容,修改hosts字段内容为以下配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
"hosts": [
{
"HTTP(S) Proxy - Wi-Fi": [
{
"name": "Turn on HTTP(S) Proxy",
"cmd": "echo <password> | sudo -S networksetup -setwebproxy 'Wi-Fi' 127.0.0.1 8080 && sudo networksetup -setsecurewebproxy 'Wi-Fi' 127.0.0.1 8080"
},
{
"name": "Turn off HTTP(S) Proxy",
"cmd": "echo <password> | sudo -S networksetup -setwebproxystate 'Wi-Fi' off && sudo networksetup -setsecurewebproxystate 'Wi-Fi' off"
}
]
}
]

配置十分简洁清晰,不用解释也能看懂。完成配置后,点击MacOS顶部菜单栏的Shuttle图标就会出现如下效果的快捷方式。