歡迎光臨
每天分享高質量文章

如何讓 curl 命令透過代理訪問 | Linux 中國

我要如何讓 curl 命令使用我在 Google Chrome 瀏覽器上的代理設定呢?
— Vivek Gite


本文導航
編譯自 | https://www.cyberciti.biz/faq/linux-unix-curl-command-with-proxy-username-password-http-options/ 
 作者 | Vivek Gite
 譯者 | lujun9972

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

  1. IP: 202.54.1.1

  2. Port: 3128

  3. Username: foo

  4. Password: bar

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

很多 Linux 和 Unix 命令列工具(比如 curl 命令,wget 命令,lynx 命令等)使用名為 http_proxyhttps_proxyftp_proxy 的環境變數來獲取代理資訊。它允許你透過代理伺服器(使用或不使用使用者名稱/密碼都行)來連線那些基於文字的會話和應用。

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

讓 curl 命令使用代理的語法

語法為:

  1. ## Set the proxy address of your uni/company/vpn network ##

  2. export http_proxy=http://your-ip-address:port/

  3. ## http_proxy with username and password

  4. export http_proxy=http://user:password@your-proxy-ip-address:port/

  5. ## HTTPS version ##

  6. export https_proxy=https://your-ip-address:port/

  7. export https_proxy=https://user:password@your-proxy-ip-address:port/

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

  1. curl -x protocol://][user:password@]proxyhost[:port]> url

  2. --proxy protocol://][user:password@]proxyhost[:port]> url

  3. --proxy http://user:password@Your-Ip-Here:Port url

  4. -x http://user:password@Your-Ip-Here:Port url

在 Linux 上的一個例子

首先設定 http_proxy

  1. ## proxy server, 202.54.1.1, port: 3128, user: foo, password: bar ##

  2. export http_proxy=http://foo:bar@202.54.1.1:3128/

  3. export https_proxy=$http_proxy

  4. ## Use the curl command ##

  5. curl -I https://www.cyberciti.biz

  6. curl -v -I https://www.cyberciti.biz

輸出為:

  1. * Rebuilt URL to: www.cyberciti.biz/

  2. *   Trying 202.54.1.1...

  3. * Connected to 1202.54.1.1 (202.54.1.1) port 3128 (#0)

  4. * Proxy auth using Basic with user 'foo'

  5. > HEAD HTTP://www.cyberciti.biz/ HTTP/1.1

  6. > Host: www.cyberciti.biz

  7. > Proxy-Authorization: Basic x9VuUml2xm0vdg93MtIz

  8. > User-Agent: curl/7.43.0

  9. > Accept: */*

  10. > Proxy-Connection: Keep-Alive

  11. >

  12. < HTTP/1.1 200 OK

  13. HTTP/1.1 200 OK

  14. < Server: nginx

  15. Server: nginx

  16. < Date: Sun, 17 Jan 2016 11:49:21 GMT

  17. Date: Sun, 17 Jan 2016 11:49:21 GMT

  18. < Content-Type: text/html; charset=UTF-8

  19. Content-Type: text/html; charset=UTF-8

  20. < Vary: Accept-Encoding

  21. Vary: Accept-Encoding

  22. < X-Whom: Dyno-l1-com-cyber

  23. X-Whom: Dyno-l1-com-cyber

  24. < Vary: Cookie

  25. Vary: Cookie

  26. < Link: ; rel="https://api.w.org/"

  27. Link: ; rel="https://api.w.org/"

  28. < X-Frame-Options: SAMEORIGIN

  29. X-Frame-Options: SAMEORIGIN

  30. < X-Content-Type-Options: nosniff

  31. X-Content-Type-Options: nosniff

  32. < X-XSS-Protection: 1; mode=block

  33. X-XSS-Protection: 1; mode=block

  34. < X-Cache: MISS from server1

  35. X-Cache: MISS from server1

  36. < X-Cache-Lookup: MISS from server1:3128

  37. X-Cache-Lookup: MISS from server1:3128

  38. < Connection: keep-alive

  39. Connection: keep-alive

  40. <

  41. * Connection #0 to host 10.12.249.194 left intact

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

  1. $ export http_proxy="vivek:myPasswordHere@10.12.249.194:3128/"

  2. $ curl -v -O http://dl.cyberciti.biz/pdfdownloads/b8bf71be9da19d3feeee27a0a6960cb3/569b7f08/cms/631.pdf

也可以使用 -x 選項:

  1. curl -x 'http://vivek:myPasswordHere@10.12.249.194:3128' -v -O https://dl.cyberciti.biz/pdfdownloads/b8bf71be9da19d3feeee27a0a6960cb3/569b7f08/cms/631.pdf

輸出為:

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

Unix 上的一個例子

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

socks 協議怎麼辦呢?

語法也是一樣的:

  1. curl -x socks5://[user:password@]proxyhost[:port]/ url

  2. curl --socks5 192.168.1.254:3099 https://www.cyberciti.biz/

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

編輯 ~/.curlrc 檔案:

  1. $ vi ~/.curlrc

新增下麵內容:

  1. proxy = server1.cyberciti.biz:3128

  2. proxy-user = "foo:bar"

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

  1. ## alias for curl command

  2. ## set proxy-server and port, the syntax is

  3. ## alias curl="curl -x {your_proxy_host}:{proxy_port}"

  4. alias curl = "curl -x server1.cyberciti.biz:3128"

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


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

作者:Vivek Gite[3] 譯者:lujun9972 校對:wxy

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

LCTT 譯者

lujun9972 ? ? ? ?
共計翻譯:73 篇
貢獻時間:52 天


推薦文章

< 左右滑動檢視相關文章 >

點選圖片、輸入文章 ID 或識別二維碼直達

贊(0)

分享創造快樂

© 2022 知識星球   網站地圖