Linux中國

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

我的系統管理員給我提供了如下代理信息:

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

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

很多 Linux 和 Unix 命令行工具(比如 curl 命令,wget 命令,lynx 命令等)使用名為 http_proxyhttps_proxyftp_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:password@your-proxy-ip-address:port/

## HTTPS version ##
export https_proxy=https://your-ip-address:port/
export https_proxy=https://user:password@your-proxy-ip-address:port/

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

curl -x <[protocol://][user:password@]proxyhost[:port]> url
--proxy <[protocol://][user:password@]proxyhost[:port]> url
--proxy http://user:password@Your-Ip-Here:Port url
-x http://user:password@Your-Ip-Here:Port url

在 Linux 上的一個例子

首先設置 http_proxy

## proxy server, 202.54.1.1, port: 3128, user: foo, password: bar ##
export http_proxy=http://foo:bar@202.54.1.1: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 &apos;foo&apos;
> 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:myPasswordHere@10.12.249.194:3128/"
$ curl -v -O http://dl.cyberciti.biz/pdfdownloads/b8bf71be9da19d3feeee27a0a6960cb3/569b7f08/cms/631.pdf

也可以使用 -x 選項:

curl -x &apos;http://vivek:myPasswordHere@10.12.249.194:3128&apos; -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:password@]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-x 選項的值要優先於環境變數設置的值。若不想走代理,而環境變數總設置了代理,那麼可以通過設置代理為空值("")來覆蓋環境變數的值。詳細信息請參閱 curl 的 man 頁

via: https://www.cyberciti.biz/faq/linux-unix-curl-command-with-proxy-username-password-http-options/

作者:Vivek Gite 譯者:lujun9972 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國