Linux 命令(136)—— curl 命令

curl 命令是一個利用 URL 規則在 Shell 終端命令行下工作的文件傳輸工具,它支持文件的上傳和下載,是綜合傳輸工具,但按使用習慣,一般稱 curl 爲下載工具。curl 被設計爲無需用戶交互即可工作。

作爲一款強力的下載工具,curl 支持包括 HTTP、HTTPS、FTP、SFTP、SCP 等衆多協議,還提供了大量有用的技巧,如代理支持、用戶身份驗證、FTP 上傳、HTTP post、SSL 連接、cookies、文件傳輸恢復、Metalink 等等。

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
	指定與 HTTP 服務器通信時使用的自定義請求方法,默認爲 GET
-y, --speed-time
	放棄限速所要的時間,默認爲30
-Y, --speed-limit
	停止傳輸速度的限制,速度時間

4.常用示例

  • 發起 HTTP GET 請求。注意 GET 請可以攜帶包體。
curl -X GET 'http://9.138.158.214:10000?advertiser_id=93&auth_code=AUTH_CODE' -H 'Content-Type:application/json' -d '{"action_time":1591100087,"ad_id":"101642"}'

如果 URL 攜帶參數,需要使用單引號或雙引號將 URL 引起來,因爲字符 & 是 Shell 特殊字符,或者使用反斜槓對其轉義。

  • 獲取網頁數據。
curl https://www.baidu.com

執行後,百度官網的網頁內容就會顯示在屏幕上了。

  • 保存網頁內容。
curl https://www.baidu.com > baidu_index.html
# 或
curl https://www.baidu.com -o baidu_index.html
  • 靜默模式下載文件。注意 URL 在最後要具體到某個文件,不然無法下載。
curl -s -O  https://dl.softmgr.qq.com/original/im/QQ9.3.3.27011.exe
  • 下載文件時顯示進度條。
curl -#  -O  https://dl.softmgr.qq.com/original/im/QQ9.3.3.27011.exe
######################################################################## 100.0%
  • 訪問需要授權的頁面時,可通過 -u 選項提供用戶名和密碼進行授權。
curl -u root  https://github.com/jindeng/sz14.git
Enter host password for user 'root':
  • 只打印響應頭部信息。
curl (-I | --head) https://github.com/jindeng/sz14.git
  • 限制 curl 的下載速度。
curl URL --limit-rate 50k

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

  • 指定可下載的最大文件大小。
curl URL --max-filesize bytes

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

  • 用 curl 設置用戶代理。
curl URL -A "Mozilla/5.0"

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

  • 自定義頭信息傳遞給服務器。使用多個 -H 選項可傳遞多個頭部信息。
curl -H "Host:man.linuxde.net" -H "accept-language:zh-cn" URL
  • curl 設置 cookies。使用 --cookie 選項來指定 cookie,多個 cookie 使用分號分隔。
curl URL --cookie "user=root;pass=123456"

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

curl URL --cookie-jar cookie_file
  • curl 設置參照頁字符串。使用 --referer 選項指定參照頁字符串。
curl --referer URL1 URL2

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

  • 斷點續傳。curl 能夠從特定的文件偏移處繼續下載,它可以通過指定一個便移量來下載部分文件。
curl URL/File -C OFFSET

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

curl -C - URL
  • 連接失敗時不顯示 http 錯誤。
curl -f https://unknow.com
  • 通過 ftp 上傳。
curl -T test.sql ftp://用戶名:密碼@ip:port/demo/curtain/bbstudy_files/ 
  • 通過 ftp下載。
curl -u 用戶名:密碼 -O URL

參考文獻

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章