Linux 命令(136)—— curl 命令

curl 命令是一個利用 URL 規則在 Shell 終端命令行下工作的文件傳輸工具;它支援文件的上傳和下載,所以是綜合傳輸工具,但按傳統,習慣稱 curl 為下載工具。

作為一款強力工具,curl 支援包括HTTP、HTTPS、FTP 等眾多協議,還支援 POST、cookies、認證、從指定偏移處下載部分文件、用戶代理字元串、限速、文件大小、進度條等特徵;做網頁處理流程和數據檢索自動化。

2.命令格式

curl [OPTIONS] [URL...]

3.選項說明

-#, --progress-bar  	顯示進度條  -a, --append  	上傳文件時,附加到目標文件  -A, --user-agent STRING  	設置用戶代理髮送給伺服器  --anyauth  	可以使用「任何」身份驗證方法  -b, --cookie <NAME=STRING/FILE>  	cookie 字元串或文件讀取位置  --basic  	使用 HTTP 基本驗證  -B, --use-ascii  	使用 ASCII 文本傳輸  -c, --cookie-jar FILE  	操作結束後把 cookie 寫入指定文件中  -C, --continue-at OFFSET  	斷點續轉  -d, --data DATA  	HTTP POST 方式傳送數據  --data-ascii DATA  	以 ascii 的方式 post 數據  --data-binary DATA  	以二進位的方式 post 數據  --negotiate  	使用 HTTP 身份驗證  --digest  	使用數字身份驗證  --disable-eprt  	禁止使用 EPRT 或 LPRT  --disable-epsv  	禁止使用 EPSV  -D, --dump-header FILE  	把 header 資訊寫入到指定文件中  --egd-file FILE   	為隨機數據(SSL)設置EGD socket路徑  --tcp-nodelay  	使用 TCP_NODELAY 選項  -e, --referer  	來源網址  -E, --cert CERT[:PASSWD]  	客戶端證書文件和密碼 (SSL)   --cert-type TYPE   	證書文件類型 (DER/PEM/ENG) (SSL)  --key KEY  	私鑰文件名 (SSL)  --key-type TYPE  	私鑰文件類型 (DER/PEM/ENG) (SSL)  --pass PASS  	私鑰密碼 (SSL)  --engine NAME  	選擇用於密碼操作的OpenSSL加密引擎  --cacert FILE  	CA證書 (SSL)  --capath <directory>	CA目錄 (made using c_rehash) to verify peer against (SSL)  --ciphers LIST  	SSL 密碼  --compressed  	要求返回是壓縮的形勢 (using deflate or gzip)  --connect-timeout SECONDS  	設置最大請求時間  --create-dirs  	建立本地目錄的目錄層次結構  --crlf  	上傳是把 LF 轉變成 CRLF  -f, --fail  	連接失敗時不顯示 http 錯誤  --ftp-create-dirs  	如果遠程目錄不存在,創建遠程目錄  --ftp-method [multicwd/nocwd/singlecwd]  	控制 CWD 的使用  --ftp-pasv  	使用 PASV/EPSV 代替埠  --ftp-skip-pasv-ip  	使用 PASV 的時候,忽略該IP地址  --ftp-ssl  	嘗試用 SSL/TLS 來進行 ftp 數據傳輸  --ftp-ssl-reqd  	要求用 SSL/TLS 來進行 ftp 數據傳輸  -F, --form NAME=CONTENT  	模擬 http 表單提交數據  --form-string NAME=STRING  	模擬 http 表單提交數據  -g, --globoff  	禁用網址序列和範圍使用 {} 和 []  -G, --get  	以get的方式來發送數據  -H, --header LINE  	自定義頭資訊傳遞給伺服器  --ignore-content-length  	忽略的 HTTP 頭資訊的長度  -i, --include  	輸出時包括 protocol 頭資訊  -I, --head  	只顯示請求頭資訊  -j, --junk-session-cookies  	讀取文件進忽略 session cookie  --interface INTERFACE  	使用指定網路介面/地址  --krb4 LEVEL  	使用指定安全級別的 krb4  -k, --insecure  	允許不使用證書到SSL站點  -K, --config  	指定的配置文件讀取  -l, --list-only  	列出ftp目錄下的文件名稱  --limit-rate RATE  	設置傳輸速度  --local-port NUM[-NUM]  	強制使用本地埠號  -m, --max-time SECONDS  	設置最大傳輸時間  --max-redirs NUM  	設置最大讀取的目錄數  --max-filesize BYTES  	設置最大下載的文件總量  -M, --manual  	顯示全手動  -n, --netrc  	從 netrc 文件中讀取用戶名和密碼  --netrc-optional  	使用 .netrc 或者 URL來覆蓋 -n  --ntlm  	使用 HTTP NTLM 身份驗證  -N, --no-buffer  	禁用緩衝輸出  -o, --output FILE  	把輸出寫到指定文件中  -O, --remote-name  	把輸出寫到與遠程文件同名的本地文件中  -p, --proxytunnel  	使用 HTTP 代理  --proxy-anyauth  	選擇任一代理身份驗證方法  --proxy-basic  	在代理上使用基本身份驗證  --proxy-digest  	在代理上使用數字身份驗證   --proxy-ntlm   	在代理上使用 ntlm 身份驗證  -P, --ftp-port ADDRESS  	使用埠地址,而不是使用PASV  -q, --disable  	作為第一個參數,關閉 .curlrc  -Q, --quote CMD  	文件傳輸前,發送命令到伺服器  -r/--range RANGE  	檢索來自HTTP/1.1或FTP伺服器位元組範圍  --range-file  	讀取(SSL)的隨機文件  -R, --remote-time  	在本地生成文件時,保留遠程文件時間  --retry NUM  	傳輸出現問題時,重試的次數  --retry-delay SECONDS  	傳輸出現問題時,設置重試間隔時間  --retry-max-time SECONDS  	傳輸出現問題時,設置最大重試時間  -s, --silent  	靜默模式。不輸出任何東西  -S, --show-error  	顯示錯誤  --socks4 HOST[:PORT]  	用 socks4 代理給定主機和埠  --socks5 HOST[:PORT]  	用 socks5 代理給定主機和埠  --stderr FILE  	將對 stderr 的所有寫入重定向到指定的文件  -t, --telnet-option OPT=VAL  	Telnet 選項設置  --trace FILE  	對指定文件進行 debug  --trace-ascii FILE  	啟用對所有傳入和傳出數據(包括描述性資訊)的完整跟蹤轉儲到給定文件。使用「-」作為文件名將輸出發送到 stdout  --trace-time  	跟蹤詳細輸出時,添加時間戳  -T, --upload-file FILE  	上傳文件  --url URL  	指定要提取的 URL  -u, --user USER[:PASSWORD]  	設置伺服器的用戶和密碼  -U, --proxy-user USER[:PASSWORD]  	設置代理用戶名和密碼  -w, --write-out FORMAT  	什麼輸出完成後  -x, --proxy HOST[:PORT]  	在給定的埠上使用HTTP代理  -X, --request COMMAND  	指定什麼命令  -y, --speed-time  	放棄限速所要的時間,默認為30  -Y, --speed-limit  	停止傳輸速度的限制,速度時間

4.常用示例

(1)獲取指定網頁的數據。

curl https://github.com/dablelv/CEasyLocalLog/archive/master.zip  <html>  <head><title>301 Moved Permanently</title></head>  <body>  <center><h1>301 Moved Permanently</h1></center>  <hr><center>nginx</center>  </body>  </html>

(2)把輸出寫到與遠程文件同名的本地文件中。

curl -O  https://github.com/jindeng/sz14.git    % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current                                   Dload  Upload   Total   Spent    Left  Speed  100   162  100   162    0     0    303      0 --:--:-- --:--:-- --:--:--   303    #查看文件  ls  sz14.git

(3)靜默模式下載東西。

curl -s -O  https://github.com/jindeng/sz14.git

(4)訪問需要授權的頁面時,可通過 -u 選項提供用戶名和密碼進行授權。

curl -uroot  https://github.com/jindeng/sz14.git  Enter host password for user 'root':

(5)顯示進度條。

curl --progress-bar  -O  https://github.com/jindeng/sz14.git  ######################################################################## 100.0%

(6)只列印響應頭部資訊。

curl -I https://github.com/jindeng/sz14.git

通過 -I 或者 –head 可以只列印出HTTP頭部資訊。

(7)用 curl 進行認證。

curl -u user:pwd  https://github.com/jindeng/sz14.git

(8)限制 curl 的下載速度。

curl URL --limit-rate 50k

使用 –limit-rate 限制 curl 的下載速度,命令中用 k(千位元組)和 m(兆位元組)指定下載速度限制。

(9)指定可下載的最大文件大小。

curl URL --max-filesize bytes

使用 –max-filesize 指定可下載的最大文件大小,如果文件大小超出限制,命令則返回一個非 0 退出碼,如果命令正常則返回 0。

(10) 用 curl 設置用戶代理。

curl URL -A "Mozilla/5.0"

有些網站訪問會提示只能使用 IE 瀏覽器來訪問,這是因為這些網站設置了檢查用戶代理,可以使用curl把用戶代理設置為IE,這樣就可以訪問了。使用 -A 或者 –user-agent 選項。

(11)自定義頭資訊傳遞給伺服器。其他HTTP頭部資訊也可以使用 curl 來發送,使用 -H"頭部資訊" 傳遞多個頭部資訊。

curl -H "Host:man.linuxde.net" -H "accept-language:zh-cn" URL

(12)curl 設置 cookies。使用 –cookie 選項來指定 cookie,多個 cookie 使用分號分隔。

curl URL --cookie "user=root;pass=123456"

將 cookie 另存為一個文件,使用 –cookie-jar 選項。

curl URL --cookie-jar cookie_file

(13)curl 設置參照頁字元串。使用 –referer 選項指定參照頁字元串。

curl --referer URL1 URL2

參照頁是位於 HTTP 頭部中的一個字元串,用來表示用戶是從哪個頁面到達當前頁面的,如果用戶點擊網頁 A 中的某個連接,那麼用戶就會跳轉到B網頁,網頁 B 頭部的參照頁字元串就包含網頁 A 的 URL。

(14)斷點續傳。curl 能夠從特定的文件偏移處繼續下載,它可以通過指定一個便移量來下載部分文件。

curl URL/File -C OFFSET

偏移量是以位元組為單位的整數,如果讓 curl 自動推斷出正確的續傳位置使用:

curl -C - URL

(15)抓取頁面內容到一個文件中。

curl -o git.html https://github.com/jindeng/sz14.git

(16)連接失敗時不顯示 http 錯誤。

curl -f https://github.com/jindeng/sz14.git  <html>  <head><title>301 Moved Permanently</title></head>  <body bgcolor="white">  <center><h1>301 Moved Permanently</h1></center>  <hr><center>nginx</center>  </body>  </html>

(17)通過 ftp 上傳。

curl -T test.sql ftp://用戶名:密碼@ip:port/demo/curtain/bbstudy_files/ 

(18)通過 ftp下載。

curl -u 用戶名:密碼 -O URL

參考文獻

[1] curl(1) manual [2] CSDN.【Linux】一步一步學Linux——curl命令(193)