本文介紹如何為自己的終端設定代理,從而實作在命令列中訪問Google,
1. 背景
當你使用SS FQ時,大部分瀏覽器都可以成功訪問Google,但是在命令列下執行curl https://www.google.com時,會超時失敗,對于類似的這種情況,本文將解釋出現這種現象的原因,并給出有效的解決方案,
2. 原因
- 啟動SS時,會創建兩個代理,一個是ss-local,一個是privoxy;ss-local用于代理socks5請求,privoxy用于代理所有的HTTP請求
- 啟動SS時,不管用PAC模式還是全域模式,都會修改網路系統代理設定
- 網路系統代理設定從哪里看?Mac:系統偏好設定-->網路-->高級-->代理
- 在代理頁中可以看到

- 從上圖可以看到,網頁代理服務器是一個部署在本地的代理服務器
- 這個本地代理服務器實際上是SS啟動時創建的,我們可以從SS的HTTP代理設定中看到

- 大部分瀏覽器的默認代理設定是系統代理

- 因此瀏覽器訪問
https://www.google.com時,實際上是把請求發送給了SS創建的本地代理服務器127.0.0.1:1087 
- 上圖的privoxy就是SS創建的本地HTTP代理服務器
127.0.0.1:1087 - privoxy會把接收到的http/https請求轉換為socks5請求,并轉發給本地的ss-local服務,ss-local服務通過socks5協議發送加密過的請求資料到遠端的SS server,SS server解密請求資料后,將真實的請求
https://www.google.com發送到Google的服務器 
- 上圖是privoxy的組態檔,privoxy的監聽地址是:
127.0.0.1:1087,轉發地址是:127.0.0.1:1080
- 終端軟體iterm/iterm2等默認是沒有設定請求代理,因此無法訪問
https://www.google.com
3. 解決方案
- http_proxy和https_proxy環境變數用于指定客戶端程式(如curl和wget)的代理設定
- 通過下面的環境變數就可以設定HTTP代理:
export http_proxy=http://127.0.0.1:8087
export https_proxy=$http_proxy
- 為了能夠快速切換代理,可以在 ~/.zshrc 或者 ~/.bash_profile 中添加這樣的alias:
alias goproxy='export http_proxy=http://127.0.0.1:8087 https_proxy=http://127.0.0.1:8087'
alias disproxy='unset http_proxy https_proxy'
4. 參考資料
- 給 iTerm 終端設定代理
- 利用 Privoxy 讓命令列下的 wget 和 curl 等命令實作自動代理
- How to set up proxy using http_proxy & https_proxy environment variable in Linux?
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/14282.html
標籤:其他
