Mac 系统终端和 iTerm2 在请求网络时并不使用代理。那如果我们想使用代理怎么办?

其实很简单,直接在终端中设置 http_proxy, https_proxy 两个环境变量即 OK 了。http_proxy, https_proxy的内容是代理服务器地址。如:

export http_proxy=http://xx.xx.xx:8099
export http_proxy=http://xx.xx.xx:8099

待って,问题来了, http_proxy, https_proxy 的值该填什么那?

假如,你已经搭建好了一个 shadowsocks 服务器,可以通过浏览器来科学上网了。那么我们知道,shadowsocks 是使用 pac文件来自动代理的,它的 HTTP 协议的下一层使用的是 SOCKS5代理服务器来转发的。该 SOCKS5 服务器一般的地址是 localhost:1080127.0.0.1:1080

# 执行 lsof 命令来查看 1080 的使用情况。
sudo lsof -i :1080

既然,shadowsocks 使用 localhost:1080 来做代理,那么我们的终端的 http, https 也可以使用这个服务器作代理呀。即:

export http_proxy=http://localhost:1080
export https_proxy=http://localhost:1080

不过,这是不行的。 因为 localhost:1080 是 SOCKS5 服务器,并不是 HTTP 服务器。那我们该怎么解决那?

解决方法

–> 请直接用鼠标滑到最后看解决方法。


我们可以使用 Privoxy来解决这个问题。因为 Privoxy 除了可以直接代理 HTTP 层外,还可以将 HTTP 转发到 SOCKS5 服务器上。原理及具体操作如下:

Provixy

1. 安装 Privoxy

brew install privoxy

The formula built, but is not symlinked into /usr/local
Could not symlink sbin/privoxy
/usr/local/sbin is not writable.

You can try again using:
  brew link privoxy
==> Caveats
To have launchd start privoxy now and restart at login:
  brew services start privoxy
Or, if you don't want/need a background service you can just run:
  privoxy /usr/local/etc/privoxy/config

2. 编辑 /usr/local/etc/privoxy/config 文件

# 在文件最后加上这一句
# 告诉 Privoxy 我们要把 http, https 都转发到 socks5 代理服务器上去。
forward-socks5  / localhost:1080 .

3. 设置 http_proxy, https_proxy变量

因为, Privoxy 服务启动之后,会在本地启动一个 127.0.0.1:8118 的代理服务器。所以们把终端下所有的 http 请求都转发到这个代理服务器上,然后这个代理服务器会把请求都转发到 SOCKS5 服务器上。

export http_proxy='http://localhost:8118'
export https_proxy='http://localhost:8118'

4. 启动 Provixy 服务器

sudo brew services list
sudo brew services start privoxy

5. 测试

~ ➜ curl ip.gs
Current IP / 当前 IP: xx.xx.xx.xx
lease visit https://ip.sb/ for more information. / IP.GS 已更改为 IP.SB ,请访问 https://ip.sb/ 获取更详细 IP 信息!
Please join Telegram group https://t.me/sbfans if you have any issues. / 如有问题,请加入 Telegram 群 https://t.me/sbfans

  /\_/\
=( °w° )=
  )   (  //
 (__ __)//

6. 配置成命令

为了方便我们可以配置方法写在 .bashrc 文件中,在终端中通过命令就可以调用啦。

# privoxy proxy
proxy () {
    echo "start use privoxy proxy"
    brew services start privoxy
    export no_proxy=localhost,127.0.0.0,127.0.0.1,127.0.1.1,local.home
    export http_proxy=http://localhost:8118
    export https_proxy=http://localhost:8118
}

# no privoxy
noproxy () {
    echo "stop use privoxy proxy"
    brew services stop privoxy
    export http_proxy=
    export https_proxy=
}

最后

解决方法是直接把代理写成 socks5://localhost:1080 呀!^_^ 😂

export http_proxy=socks5://localhost:1080
export https_proxy=$http_proxy

如果看到了中间部分的内容,了解下 Pvivoxy, Tor 也是可以的。不过如果使用 Docker 的话,代理还是最好设置成 http 的,而不是使用 socks5 协议。

参考