github email
ProxySet

Mac下代理设置

采菊东篱下,悠然见南山。

一直都在网络上找Mac下的代理设置,因为使用了VPN。但是,查找的资料一直都没有能说清楚,直到昨天,终于看到了这篇文章,把我近几个月来的烦恼都解决了。不知道能不能查阅到,所以我贴了大部分内容。

在终端下访问系统代理

scutil命令管理系统配置参数,通过 –proxy参数来显示系统代理信息。

未配置代理情况:

$ scutil --proxy
<dictionary> {
  FTPPassive : 1
  HTTPEnable : 0
  HTTPSEnable : 0
}

配置代理的情况:

$ scutil --proxy
<dictionary> {
  ExcludeSimpleHostnames : 1
  FTPEnable : 0
  FTPPassive : 1
  GopherEnable : 0
  HTTPEnable : 1
  HTTPPort : 49199
  HTTPProxy : localhost
  HTTPSEnable : 1
  HTTPSPort : 49199
  HTTPSProxy : localhost
  ProxyAutoConfigEnable : 0
  ProxyAutoDiscoveryEnable : 0
  RTSPEnable : 0
  SOCKSEnable : 0
}

解析scutil输出

我们可以使用awk解析scutil的输出并提取代理配置。 以下代码片段可以解决问题:

$ export http_proxy=`scutil --proxy | awk '\
  /HTTPEnable/ { enabled = $3; } \
  /HTTPProxy/ { server = $3; } \
  /HTTPPort/ { port = $3; } \
  END { if (enabled == "1") { print "http://" server ":" port; } }'`
$ export HTTP_PROXY="${http_proxy}"

该脚本在scutil的输出中查找HTTPEnable,HTTPProxy和HTTPPort。 如果启用了代理,则脚本将打印出代理URL,并将其设置为http_proxy环境变量。 如果未启用代理,则脚本会将http_proxy设置为空字符串。 最后一行还设置了HTTP_PROXY环境变量,因为某些命令行应用程序使用了它。

将此片段放在.bash_profile中可确保在有线和无线网络之间切换时,代理将自动保持配置状态。

以上就是该文章的主要内容,我也根据上面的内容自己写了一个脚本setproxy.sh,因为我使用的VPN是动态的。

echo 'display proxy info'
scutil --proxy
echo 'set proxy http'
export http_proxy=`scutil --proxy | awk '\
  /HTTPEnable/ { enabled = $3; } \
  /HTTPProxy/ { server = $3; } \
  /HTTPPort/ { port = $3; } \
  END { if (enabled == "1") { print "http://" server ":" port; } }'`

echo "httpproxy is ${http_proxy}"
echo 'set http_proxy'

export HTTP_PROXY="${http_proxy}"

echo "HTTP_PROXY is ${HTTP_PROXY}"

echo 'done,have a good time!'

使用的时候使用source,而不是sh。

source setproxy.sh

这样,控制端就能使用了。

VS Code下的代理

在控制端下使用了代理,而使用VS Code的时候也需要进行go的插件升级,所以,我们在VS Code的代理中使用了控制端中获取的代理信息,进行配置。

在控制中获取代理信息

httpproxy is http://localhost:50927

将代理信息设置到VS Code中的配置信息

在settings.json中添加一下配置

"http.proxy": "http://localhost:50927"

完成后,重启VS Code。终于看到了以下的信息:

go.toolsGopath setting is not set. Using GOPATH /Users/guoby/OneDrive/mywork/code/gocode
Installing 17 tools at /Users/guoby/OneDrive/mywork/code/gocode/bin in module mode.
  gocode
  gopkgs
  go-outline
  go-symbols
  guru
  gorename
  gotests
  gomodifytags
  impl
  fillstruct
  goplay
  dlv
  gocode-gomod
  godef
  goreturns
  golint
  gopls

Installing github.com/mdempsky/gocode SUCCEEDED
Installing github.com/uudashr/gopkgs/cmd/gopkgs SUCCEEDED
Installing github.com/ramya-rao-a/go-outline SUCCEEDED
Installing github.com/acroca/go-symbols SUCCEEDED
Installing golang.org/x/tools/cmd/guru SUCCEEDED
Installing golang.org/x/tools/cmd/gorename SUCCEEDED
Installing github.com/cweill/gotests/... SUCCEEDED
Installing github.com/fatih/gomodifytags SUCCEEDED
Installing github.com/josharian/impl SUCCEEDED
Installing github.com/davidrjenni/reftools/cmd/fillstruct SUCCEEDED
Installing github.com/haya14busa/goplay/cmd/goplay SUCCEEDED
Installing github.com/go-delve/delve/cmd/dlv SUCCEEDED
Installing github.com/stamblerre/gocode SUCCEEDED
Installing github.com/rogpeppe/godef SUCCEEDED
Installing github.com/sqs/goreturns SUCCEEDED
Installing golang.org/x/lint/golint SUCCEEDED
Installing golang.org/x/tools/gopls SUCCEEDED

Reload VS Code window to use the Go language server
All tools successfully installed. You're ready to Go :).

为了,看到这个信息,我甚至想到了如何学习计算机网络了,大头书都找到了,准备深入学习了,毕竟这个问题困扰自己太久了。而最让人兴奋的是,使用google解决了。所以,是不是有一个思路,就是关注问题,持续关注,使用google,最终解决问题。如果看完大头书我感觉已经好几个月了,而自己的问题却没有能及时解决。而自己也从未放弃过学习。

如果说自己的理论基础薄弱的话,那么在使用google的过程中也锻炼了自己的英文能力。同样,也验证了多学科之间的相互作用。如果没有使用英文进行正确的搜索,或许这个问题需要好久才能解决;如果自己没有实际的动手能力,及时找到了正确的文章也不能解决。或许,这就是相辅相成,所学的知识都有用。学以致用!

在终端发现,最简单的代理方式:

export https_proxy="http://127.0.0.1:2020"