1. 程式人生 > >如何讓 curl 命令通過代理訪問

如何讓 curl 命令通過代理訪問

如何讓 curl 命令通過代理訪問

Linux.中國 - 開源中文社群 2018-01-18  8909 閱讀 技術

我的系統管理員給我提供瞭如下代理資訊:

IP: 202.54.1.1 Port: 3128 Username: foo Password: bar

該設定在 Google Chrome 和 Firefox 瀏覽器上很容易設定。但是我要怎麼把它應用到 curl 命令上呢?我要如何讓 curl 命令使用我在 Google Chrome 瀏覽器上的代理設定呢?

很多 Linux 和 Unix 命令列工具(比如 curl 

命令, wget 命令, lynx 命令等)使用名為 http_proxy , https_proxy , ftp_proxy 的環境變數來獲取代理資訊。它允許你通過代理伺服器(使用或不使用使用者名稱/密碼都行)來連線那些基於文字的會話和應用。

本文就會演示一下如何讓 curl 通過代理伺服器傳送 HTTP/HTTPS 請求。

讓 curl 命令使用代理的語法

語法為:

## Set the proxy address of your uni/company/vpn network ## 
export http_proxy=http://your-ip-address:port/ ## http_proxy with username and password  export http_proxy=http://user:
[email protected]
:port/ ## HTTPS version ## export https_proxy=https://your-ip-address:port/ export https_proxy=https://user:[email protected]:port/

另一種方法是使用 curl 命令的 -選項:

curl -x <[protocol://][user:[email protected]]proxyhost[:port]> url --proxy <[protocol://][user:
[email protected]
]proxyhost[:port]> url --proxy http://user:[email protected] url -x http://user:[email protected] url

在 Linux 上的一個例子

首先設定 http_proxy 

## proxy server, 202.54.1.1, port: 3128, user: foo, password: bar ##
export http_proxy=http://foo:[email protected]:3128/ export https_proxy=$http_proxy ## Use the curl command ## curl -I https://www.cyberciti.biz curl -v -I https://www.cyberciti.biz

輸出為:

* Rebuilt URL to: www.cyberciti.biz/ * Trying 202.54.1.1... * Connected to 1202.54.1.1 (202.54.1.1) port 3128 (#0) * Proxy auth using Basic with user 'foo' > HEAD HTTP://www.cyberciti.biz/ HTTP/1.1 > Host: www.cyberciti.biz > Proxy-Authorization: Basic x9VuUml2xm0vdg93MtIz > User-Agent: curl/7.43.0 > Accept: */* > Proxy-Connection: Keep-Alive > < HTTP/1.1 200 OK HTTP/1.1 200 OK < Server: nginx Server: nginx < Date: Sun, 17 Jan 2016 11:49:21 GMT Date: Sun, 17 Jan 2016 11:49:21 GMT < Content-Type: text/html; charset=UTF-8 Content-Type: text/html; charset=UTF-8 < Vary: Accept-Encoding Vary: Accept-Encoding < X-Whom: Dyno-l1-com-cyber X-Whom: Dyno-l1-com-cyber < Vary: Cookie Vary: Cookie < Link: <http://www.cyberciti.biz/wp-json/>; rel="https://api.w.org/" Link: <http://www.cyberciti.biz/wp-json/>; rel="https://api.w.org/" < X-Frame-Options: SAMEORIGIN X-Frame-Options: SAMEORIGIN < X-Content-Type-Options: nosniff X-Content-Type-Options: nosniff < X-XSS-Protection: 1; mode=block X-XSS-Protection: 1; mode=block < X-Cache: MISS from server1 X-Cache: MISS from server1 < X-Cache-Lookup: MISS from server1:3128 X-Cache-Lookup: MISS from server1:3128 < Connection: keep-alive Connection: keep-alive < * Connection #0 to host 10.12.249.194 left intact

本例中,我來下載一個 pdf 檔案:

$ export http_proxy="vivek:[email protected]:3128/" $ curl -v -O http://dl.cyberciti.biz/pdfdownloads/b8bf71be9da19d3feeee27a0a6960cb3/569b7f08/cms/631.pdf

也可以使用 -選項:

curl -x 'http://vivek:[email protected]:3128' -v -O https://dl.cyberciti.biz/pdfdownloads/b8bf71be9da19d3feeee27a0a6960cb3/569b7f08/cms/631.pdf

輸出為:

Fig.01:curl in action \(click to enlarge\)

Unix 上的一個例子

$ curl -x http://prox_server_vpn:3128/ -I https://www.cyberciti.biz/faq/howto-nginx-customizing-404-403-error-page/

socks 協議怎麼辦呢?

語法也是一樣的:

curl -x socks5://[user:[email protected]]proxyhost[:port]/ url curl --socks5 192.168.1.254:3099 https://www.cyberciti.biz/

如何讓代理設定永久生效?

編輯 ~/.curlrc 檔案:

$ vi ~/.curlrc

新增下面內容:

proxy = server1.cyberciti.biz:3128 proxy-user = "foo:bar"

儲存並關閉該檔案。另一種方法是在你的 ~/.bashrc 檔案中建立一個別名:

## alias for curl command
## set proxy-server and port, the syntax is
## alias curl="curl -x {your_proxy_host}:{proxy_port}" alias curl = "curl -x server1.cyberciti.biz:3128"

記住,代理字串中可以使用 protocol:// 字首來指定不同的代理協議。使用 socks4:// , socks4a:// , socks5:// 或者socks5h:// 來指定使用的 SOCKS 版本。若沒有指定協議或者使用 http:// 表示 HTTP 協議。若沒有指定埠號則預設為 1080 。 -選項的值要優先於環境變數設定的值。若不想走代理,而環境變數總設定了代理,那麼可以通過設定代理為空值( "" )來覆蓋環境變數的值。詳細資訊請參閱 curl 的 man 頁