命令概要
該命令設(shè)計(jì)用于在沒有用戶交互的情況下工作。
curl 是一個(gè)工具,用于傳輸來自服務(wù)器或者到服務(wù)器的數(shù)據(jù)。「向服務(wù)器傳輸數(shù)據(jù)或者獲取來自服務(wù)器的數(shù)據(jù)」
可支持的協(xié)議有(DICT、FILE、FTP、FTPS、GOPHER、HTTP、HTTPS、IMAP、IMAPS、LDAP、LDAPS、POP3、POP3S、RTMP、RTSP、SCP、SFTP、SMTP、SMTPS、TELNET和TFTP)。
curl提供了大量有用的技巧,比如代理支持、用戶身份驗(yàn)證、FTP上傳、HTTP post、SSL連接、cookie、文件斷點(diǎn)續(xù)傳、Metalink等等。正如你將在下面看到的,這些特性的數(shù)量會讓您頭暈?zāi)垦#?/p>
訪問的URL
你可以在命令行上指定任意數(shù)量的url。它們將按指定的順序依次獲取。
你可以指定多個(gè)url,或url的部分通過在花括號內(nèi)編寫部分集,如:
1 http://site.{one,two,three}.com
2 # 參見
3 curl http://www.zhangblog.com/2019/06/16/hexo{04,05,06}/ -I # 查看信息
或者可以使用[]得到字母數(shù)字序列的序列,如:
1 ftp://ftp.numericals.com/file[1-100].txt
2 ftp://ftp.numericals.com/file[001-100].txt # 前導(dǎo)用零
3 ftp://ftp.letters.com/file[a-z].txt
4 # 參見
5 curl http://www.zhangblog.com/2019/06/16/hexo[04-06]/ -I # 查看信息
不支持嵌套序列,但可以使用幾個(gè)相鄰的序列:
http://any.org/archive[1996-1999]/vol[1-4]/part{a,b,c}.html
你可以指定一個(gè)步長計(jì)數(shù)器的范圍,以獲得每第n個(gè)數(shù)字或字母:
http://www.numericals.com/file[1-100:10].txt
http://www.letters.com/file[a-z:2].txt
如果指定URL而沒有protocol:// prefix,默認(rèn)為HTTP。
常用選項(xiàng)一
curl通常在操作過程中顯示一個(gè)進(jìn)度表,顯示傳輸?shù)臄?shù)據(jù)量、傳輸速度和估計(jì)的剩余時(shí)間等。
-#, --progress-bar
將curl進(jìn)度顯示為一個(gè)簡單的進(jìn)度條;而不是標(biāo)準(zhǔn)的、具有更多信息的進(jìn)度表。
1 [root@iZ28xbsfvc4Z 20190702]# curl -O http://www.zhangblog.com/2019/06/16/hexo04/index.html # 默認(rèn)的進(jìn)度表
2 % Total % Received % Xferd Average Speed Time Time Time Current
3 Dload Upload Total Spent Left Speed
4 100 97299 100 97299 0 0 186k 0 --:--:-- --:--:-- --:--:-- 186k
5 [root@iZ28xbsfvc4Z 20190702]#
6 [root@iZ28xbsfvc4Z 20190702]# curl -# -O http://www.zhangblog.com/2019/06/16/hexo04/index.html #簡單的進(jìn)度條
7 ######################################################################## 100.0%
-0, --http1.0
(HTTP)強(qiáng)制curl使用HTTP 1.0發(fā)出請求,而不是使用其內(nèi)部首選的HTTP 1.1。
-1, --tlsv1
(SSL)強(qiáng)制curl使用TLS 1.x 版本,當(dāng)與遠(yuǎn)程TLS服務(wù)進(jìn)行協(xié)商時(shí)。可以使用選項(xiàng) --tlsv1.0、--tlsv1.1和 --tlsv1.2來更精確地控制TLS版本(如果使用的SSL后端支持這種級別的控制)。
-2, --sslv2
(SSL)強(qiáng)制curl使用TLS 2 版本,當(dāng)與遠(yuǎn)程TLS服務(wù)進(jìn)行協(xié)商時(shí)。
-3, --sslv3
(SSL)強(qiáng)制curl使用TLS 3 版本,當(dāng)與遠(yuǎn)程TLS服務(wù)進(jìn)行協(xié)商時(shí)。
-4, --ipv4
如果curl能夠?qū)⒁粋€(gè)地址解析為多個(gè)IP版本(比如它支持ipv4和ipv6),那么這個(gè)選項(xiàng)告訴curl只將名稱解析為IPv4地址。
-6, --ipv6
如果curl能夠?qū)⒁粋€(gè)地址解析為多個(gè)IP版本(比如它支持ipv4和ipv6),那么這個(gè)選項(xiàng)告訴curl只將名稱解析為IPv6地址。
-a, --Append
(FTP/SFTP)當(dāng)在上傳中使用時(shí),這將告訴curl追加到目標(biāo)文件而不是覆蓋它。如果文件不存在,將創(chuàng)建它。注意,一些SSH服務(wù)器(包括OpenSSH)會忽略此標(biāo)志。
-A, --user-agent <agent string>
(HTTP)指定要發(fā)送到HTTP服務(wù)端的User-Agent字符串。當(dāng)然也可以使用 -H, --header 選項(xiàng)來設(shè)置。用于模擬客戶端,如:谷歌瀏覽器、火狐瀏覽器、IE 瀏覽器等等。
如果多次使用此選項(xiàng),則將使用最后一個(gè)選項(xiàng)。
模仿瀏覽器訪問
curl -A "Mozilla/5.0 (windows NT 10.0; Win64; x64) Chrome/75.0.3770.999" http://www.zhangblog.com/2019/06/24/domainexpire/
--basic
(HTTP)告訴curl使用HTTP基本身份驗(yàn)證。這是默認(rèn)的。
常用選項(xiàng)二
-b, --cookie <name=data>
(HTTP)將數(shù)據(jù)作為cookie傳遞給HTTP服務(wù)器。它應(yīng)該是之前從服務(wù)端接收到的“Set-Cookie:”行中的數(shù)據(jù)。數(shù)據(jù)格式為“NAME1=VALUE1;NAME2 = VALUE2”。
如果行中沒有使用 ‘=’ 符號,則將其視為一個(gè)文件名,用于讀取先前存儲的cookie行,如果它們匹配,則應(yīng)在此會話中使用。要讀取cookie文件的文件格式應(yīng)該是純HTTP頭文件或Netscape/Mozilla cookie文件格式。
注意:使用 -b, --cookie 指定的文件僅用作輸入。文件中不會存儲cookies。要存儲cookies,可以使用 -c, --cookie-jar 選項(xiàng),或者您甚至可以使用 -D, --dump-header 將HTTP頭保存到文件中。
-c, --cookie-jar <file name>
(HTTP)指定希望curl在完成操作后將所有cookie寫入哪個(gè)文件。Curl寫之前從指定文件讀取的所有cookie,以及從遠(yuǎn)程服務(wù)端接收的所有cookie。如果沒有已知的cookie,則不會寫入任何文件。該文件將使用Netscape cookie文件格式編寫。如果你將文件名設(shè)置為單個(gè)破折號 “-” ,cookie將被標(biāo)準(zhǔn)輸出。
該命令行選項(xiàng)將激活cookie引擎,使curl記錄并使用cookies。激活它的另一種方法是使用 -b, --cookie 選項(xiàng)。
如果不能創(chuàng)建或?qū)懭隿ookie jar,那么整個(gè)curl操作就不會失敗,甚至不能清楚地報(bào)告錯誤。使用 -v 會得到一個(gè)警告,但這是你得到的關(guān)于這種可能致命的情況的唯一可見反饋。
如果多次使用此選項(xiàng),將使用最后指定的文件名。
--connect-timeout <seconds>
連接服務(wù)端的超時(shí)時(shí)間。這只限制了連接階段,一旦curl連接了此選項(xiàng)就不再使用了。
也可參見:-m, --max-time 選項(xiàng)。
1 # 當(dāng)前 https://www.zhangXX.com 是國外服務(wù)器,訪問受限
2 [root@iZ28xbsfvc4Z ~]# curl --connect-timeout 10 https://www.zhangXX.com | head
3 % Total % Received % Xferd Average Speed Time Time Time Current
4 Dload Upload Total Spent Left Speed
5 0 0 0 0 0 0 0 0 --:--:-- 0:00:10 --:--:-- 0
6 curl: (28) Connection timed out after 10001 milliseconds
--create-dirs
當(dāng)與 -o 選項(xiàng)一起使用時(shí),curl將根據(jù)需要創(chuàng)建必要的本地目錄層次結(jié)構(gòu)。
這個(gè)選項(xiàng)只創(chuàng)建與 -o 選項(xiàng)相關(guān)的dirs,沒有其他內(nèi)容。如果 -o 文件名沒有使用dir,或者其中提到的dir已經(jīng)存在,則不會創(chuàng)建dir。
示例
curl -o ./hexo04/index.html --create-dirs http://www.zhangblog.com/2019/06/16/hexo04
-C, --continue-at <offset>
按給定偏移量繼續(xù)/恢復(fù)以前的文件傳輸。給定的偏移量是將被跳過的確切字節(jié)數(shù),從源文件的開頭開始計(jì)算,然后再將其傳輸?shù)侥繕?biāo)文件。
使用 “-C -“「注意有空格和無空格的情況」,告訴curl自動找出在哪里/如何恢復(fù)傳輸。然后,它使用給定的輸出/輸入文件來解決這個(gè)問題。
1 # 下載一個(gè) 2G 的文件,可以反復(fù)測試,查看結(jié)果
2 curl -C - -o tmp.data http://www.zhangblog.com/uploads/tmp/tmp.data
-d, --data <data>
使用該選項(xiàng),那么默認(rèn)請求方式為 POST。(HTTP)在POST請求中向HTTP服務(wù)器發(fā)送指定的數(shù)據(jù),與瀏覽器在用戶填寫HTML表單并按下submit按鈕時(shí)所做的相同。這將導(dǎo)致curl使用content-type application/x-www-form-urlencoded將數(shù)據(jù)傳遞給服務(wù)器。也可參見:-F,-form 。
如果這些命令在同一個(gè)命令行使用多次,這些數(shù)據(jù)片段將使用指定的分隔符 & 合并。因此,使用 ‘-d name=daniel -d skill=lousy’ 將生成一個(gè)類似 ‘name=daniel&skill=lousy’ 的post塊,也可以直接這樣合并使用。
-d, --data 與 --data-ascii 相同。post數(shù)據(jù)為純粹的二進(jìn)制數(shù)據(jù)時(shí),那么使用 --data-binary 選項(xiàng)。要對表單字段的值進(jìn)行url編碼,可以使用 --data-urlencode。
如果您以字母@開始數(shù)據(jù),那么其余的應(yīng)該是一個(gè)文件名,以便從其中讀取數(shù)據(jù)。或者 - 如果您希望curl從stdin【標(biāo)準(zhǔn)輸入】讀取數(shù)據(jù)。文件的內(nèi)容必須已經(jīng)是url編碼的。還可以指定多個(gè)文件。因此,Posting數(shù)據(jù)名為 “foobar” 的文件將使用 --data @foobar 完成。
示例
請求信息:
1 [root@iZ28xbsfvc4Z 20190712]# curl -sv --local-port 9000 -d 'user=zhang&pwd=123456' http://www.zhangblog.com/2019/06/24/domainexpire/ | head -n1
2 * About to connect() to www.zhangblog.com port 80 (#0)
3 * Trying 120.27.48.179...
4 * Local port: 9000
5 * Connected to www.zhangblog.com (120.27.48.179) port 80 (#0)
6 > POST /2019/06/24/domainexpire/ HTTP/1.1 # 可見請求方式為POST
7 > User-Agent: curl/7.29.0
8 > Host: www.zhangblog.com
9 > Accept: */*
10 > Content-Length: 21
11 > Content-Type: application/x-www-form-urlencoded
12 >
13 } [data not shown]
14 * upload completely sent off: 21 out of 21 bytes
15 < HTTP/1.1 405 Not Allowed
16 < Server: Nginx/1.14.2
17 < Date: Fri, 12 Jul 2019 13:34:20 GMT
18 < Content-Type: text/html
19 < Content-Length: 173
20 < Connection: keep-alive
21 <
22 { [data not shown]
23 * Connection #0 to host www.zhangblog.com left intact
24 <html>
抓包信息
[root@iZ28xbsfvc4Z tcpdump]# tcpdump -i any port 9000 -A -s 0
--data-ascii <data>
參見 -d, --data
--data-binary <data>
(HTTP) POST數(shù)據(jù)完全按照指定的方式,沒有任何額外的處理。
如果您以字母@開始數(shù)據(jù),其余的應(yīng)該是文件名。數(shù)據(jù)是以類似于 --data-ascii 的方式發(fā)布的,只不過保留了換行,而且永遠(yuǎn)不會進(jìn)行轉(zhuǎn)換【數(shù)據(jù)不轉(zhuǎn)換】。
如果多次使用此選項(xiàng),第一個(gè)選項(xiàng)后面的選項(xiàng)將按照 -d, --data 中的描述追加數(shù)據(jù)。
--data-urlencode <data>
(HTTP)這個(gè)Post 數(shù)據(jù),與另一個(gè) --data 選項(xiàng)類似,除執(zhí)行url編碼以外。
-D, --dump-header <file>
將響應(yīng)協(xié)議頭寫入指定的文件。
如果多次使用此選項(xiàng),則將使用最后一個(gè)選項(xiàng)。
當(dāng)你想要存儲HTTP站點(diǎn)發(fā)送給你的頭文件時(shí),使用此選項(xiàng)非常方便。
1 [root@iZ28xbsfvc4Z 20190703]# curl -D baidu_header.info www.baidu.com
2 ………………
3 [root@iZ28xbsfvc4Z 20190703]# ll
4 total 4
5 -rw-r--r-- 1 root root 400 Jul 3 10:11 baidu_header.info # 生成的頭文件
之后第二次curl調(diào)用通過 -b, --cookie 選項(xiàng),可以從頭部讀取 cookies 。然而 -c, --cookie-jar 選項(xiàng)是存儲 cookies 更好的方法。
常用選項(xiàng)三
--digest
(HTTP)啟用HTTP摘要身份驗(yàn)證。這是一種身份驗(yàn)證方案,可以防止密碼以明文通過網(wǎng)絡(luò)發(fā)送。將此選項(xiàng)與普通的 -u, --user 選項(xiàng)組合使用,以設(shè)置用戶名和密碼。相關(guān)選項(xiàng)請參見 --ntlm, --negotiate 和 --anyauth。
如果多次使用此選項(xiàng),則只使用第一個(gè)選項(xiàng)。
-e, --referer <URL>
(HTTP)將 “Referer Page” 【從哪個(gè)頁面跳轉(zhuǎn)過來的】信息發(fā)送到HTTP服務(wù)器。當(dāng)然也可以使用 -H, --header 標(biāo)志來設(shè)置。
如果多次使用此選項(xiàng),則將使用最后一個(gè)選項(xiàng)。
curl -e 'https:www.baidu.com' http://www.zhangblog.com/2019/06/24/domainexpire/
-f, --fail
(HTTP)在服務(wù)器錯誤上靜默失敗(完全沒有輸出)。這主要是為了使腳本等更好地處理失敗的嘗試。
在通常情況下,當(dāng)HTTP服務(wù)器無法交付文檔時(shí),它會返回一個(gè)HTML文檔,說明原因(通常還會描述原因)。此標(biāo)志將阻止curl輸出該值并返回錯誤22。
1 [root@iZ28xbsfvc4Z 20190713]# curl http://www.zhangblog.com/201912312
2 <html>
3 <head><title>404 Not Found</title></head>
4 <body bgcolor="white">
5 <center><h1>404 Not Found</h1></center>
6 <hr><center>nginx/1.14.2</center>
7 </body>
8 </html>
9 [root@iZ28xbsfvc4Z 20190713]# curl -f http://www.zhangblog.com/201912312
10 curl: (22) The requested URL returned error: 404 Not Found
-F, --form <name=content>
(HTTP)這允許curl模擬用戶按下submit按鈕后填充的表單。
該情況讓curl 可使用Content-Type multipart/form-data POST數(shù)據(jù)。也可以上傳二進(jìn)制文件等。
@文件名:使一個(gè)文件作為文件上傳附加在post中。<文件名:從文件中獲取該文本字段的內(nèi)容。
例如,要將密碼文件發(fā)送到服務(wù)器,其中“password”是表單字段的名稱,/etc/passwd將作為輸入:
curl -F password=@/etc/passwd www.mypasswords.com
您還可以使用 ‘type=’ 告訴curl使用什么 Content-Type ,方法類似于:
curl -F "web=@index.html;type=text/html" url.com
或
curl -F "name=daniel;type=text/foo" url.com
可以通過設(shè)置 filename= 更改本地上傳的文件名,如下:
curl -F "file=@localfile;filename=nameinpost" url.com
上傳的文件名從改為了 nameinpost
如果文件名/路徑包括 ‘,’ 或 ‘;’ ,必須用雙引號括起來:
curl -F "file=@"localfile";filename="nameinpost"" url.com
或
curl -F 'file=@"localfile";filename="nameinpost"' url.com
最外層可用單引號或雙引號。
這個(gè)選項(xiàng)可以多次使用。
請勿如下使用
curl -F 'user=zhang&password=pwd' url.com # 這種用法是錯誤的
--form-string <name=string>
(HTTP)類似于 --form,只是命名參數(shù)的value字符串按字面意思使用。在值中以 ‘@’ 和 ‘<’ 開頭的字符,以及 ‘;type=’ 字符串沒有特殊的含義。
如果字符串值有可能意外觸發(fā) --form 的 “@” 或 “<” 特性,請優(yōu)先使用此選項(xiàng)。
-g, --globoff
這個(gè)選項(xiàng)關(guān)閉了“URL全局解析器”。當(dāng)您設(shè)置這個(gè)選項(xiàng)時(shí),您可以指定包含字母 {}[] 的url,而不需要curl本身來解釋它們。
注意,這些字母不是正常的合法URL內(nèi)容,但是它們應(yīng)該按照URI標(biāo)準(zhǔn)進(jìn)行編碼。
-G, --get
使用此選項(xiàng)時(shí),將使所有使用 -d, --data 或 --data-binary 指定的數(shù)據(jù)在HTTP GET請求中使用,而不是在POST請求中使用。數(shù)據(jù)將被追加到URL的一個(gè) ‘?’ 的分隔符后。
如果與 -I 結(jié)合使用,POST數(shù)據(jù)將被替換追加到帶有HEAD請求的URL中。
如果多次使用此選項(xiàng),則只使用第一個(gè)選項(xiàng)。
示例
1 [root@iZ28xbsfvc4Z 20190712]# curl -sv -G --local-port 9000 -d 'user=zhang&pwd=123456' http://www.zhangblog.com/2019/06/24/domainexpire/ | head -n1
2 或則
3 [root@iZ28xbsfvc4Z 20190713]# curl -sv --local-port 9000 "http://www.zhangblog.com/2019/06/24/domainexpire/?user=zhang&pwd=123456" | head -n1
4 * About to connect() to www.zhangblog.com port 80 (#0)
5 * Trying 120.27.48.179...
6 * Local port: 9000
7 * Connected to www.zhangblog.com (120.27.48.179) port 80 (#0)
8 > GET /2019/06/24/domainexpire/?user=zhang&pwd=123456 HTTP/1.1 # 可見請求方式為 GET,且參數(shù)追加到了URI后
9 > User-Agent: curl/7.29.0
10 > Host: www.zhangblog.com
11 > Accept: */*
12 >
13 < HTTP/1.1 200 OK
14 < Server: nginx/1.14.2
15 < Date: Fri, 12 Jul 2019 14:04:19 GMT
16 < Content-Type: text/html
17 < Content-Length: 51385
18 < Last-Modified: Tue, 09 Jul 2019 13:55:19 GMT
19 < Connection: keep-alive
20 < ETag: "5d249cc7-c8b9"
21 < Accept-Ranges: bytes
22 <
23 { [data not shown]
24 * Connection #0 to host www.zhangblog.com left intact
25 <!DOCTYPE html>
抓包信息
[root@iZ28xbsfvc4Z tcpdump]# tcpdump -i any port 9000 -A -s 0
-H, --header <header>
(HTTP) 要發(fā)送到服務(wù)端的自定義請求頭。
此選項(xiàng)可多次用于添加/替換/刪除多個(gè)headers。
1 curl -H 'Connection: keep-alive' -H 'Referer: https://sina.com.cn' -H 'User-Agent: Mozilla/1.0' http://www.zhangblog.com/2019/06/24/domainexpire/
--ignore-content-length
(HTTP)忽略Content-Length 頭信息。
-i, --include
(HTTP)在輸出的內(nèi)容中包含HTTP 頭信息。
curl -i https://www.baidu.com
-I, --head
(HTTP/FTP/FILE)只獲取HTTP頭文件。在FTP或FILE 文件上使用時(shí),curl只顯示文件大小和最后修改時(shí)間。
curl -I https://www.baidu.com
-k, --insecure
(SSL)允許curl執(zhí)行不安全的SSL連接和傳輸。所有SSL連接都嘗試使用默認(rèn)安裝的CA證書包來確保安全。
示例
1 [root@iZ28xbsfvc4Z ~]# curl https://140.205.16.113/ # 被拒絕
2 curl: (51) Unable to communicate securely with peer: requested domain name does not match the server's certificate.
3 [root@iZ28xbsfvc4Z ~]#
4 [root@iZ28xbsfvc4Z ~]# curl -k https://140.205.16.113/ # 允許執(zhí)行不安全的證書連接
5 <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
6 <html>
7 <head><title>403 Forbidden</title></head>
8 <body bgcolor="white">
9 <h1>403 Forbidden</h1>
10 <p>You don't have permission to access the URL on this server.<hr/>Powered by Tengine</body>
11 </html>
常用選項(xiàng)四
--keepalive-time <seconds>
keepalive 時(shí)長。如果使用no-keepalive,則此選項(xiàng)無效。
如果多次使用此選項(xiàng),則將使用最后一個(gè)選項(xiàng)。如果未指定,該選項(xiàng)默認(rèn)為60秒。
--key <key>
(SSL/SSH)私鑰文件名。允許你在這個(gè)單獨(dú)的文件中提供你的私鑰。
對于SSH,如果沒有指定,curl嘗試如下順序:’~/.ssh/id_rsa’,’~/.ssh/id_dsa’,’./id_rsa’,’./id_dsa’。
如果多次使用此選項(xiàng),則將使用最后一個(gè)選項(xiàng)。
--key-type <type>
(SSL)私鑰文件類型。指定 --key 提供的私鑰的類型。支持DER、PEM和ENG。如果沒有指定,則定為PEM。
如果多次使用此選項(xiàng),則將使用最后一個(gè)選項(xiàng)。
-L, --location
(HTTP/HTTPS) 跟蹤重定向如果服務(wù)器報(bào)告請求頁面已移動到另一個(gè)位置(用location: header和3XX響應(yīng)代碼表示),此選項(xiàng)將使curl在新位置上重做請求。
如果與 -i, --include 或 -I, --head 一起使用,將顯示所有請求頁面的標(biāo)題。
1 [root@iZ28xbsfvc4Z ~]# curl -I -L https://baidu.com/
2 HTTP/1.1 302 Moved Temporarily # 302 重定向
3 Server: bfe/1.0.8.18
4 Date: Thu, 04 Jul 2019 03:07:15 GMT
5 Content-Type: text/html
6 Content-Length: 161
7 Connection: keep-alive
8 Location: http://www.baidu.com/
9
10 HTTP/1.1 200 OK
11 Accept-Ranges: bytes
12 Cache-Control: private, no-cache, no-store, proxy-revalidate, no-transform
13 Connection: Keep-Alive
14 Content-Length: 277
15 Content-Type: text/html
16 Date: Thu, 04 Jul 2019 03:07:15 GMT
17 Etag: "575e1f60-115"
18 Last-Modified: Mon, 13 Jun 2016 02:50:08 GMT
19 Pragma: no-cache
20 Server: bfe/1.0.8.18
--limit-rate <speed>
指定要使用curl的最大傳輸速率。
如果有一個(gè)有限的管道,并且希望傳輸不要使用您的全部帶寬,那么這個(gè)特性是非常有用的。
curl --limit-rate 500 http://www.baidu.com/
curl --limit-rate 2k http://www.baidu.com/
單位:默認(rèn)字節(jié),除非添加后綴。附加 “k” 或 “K” 表示千字節(jié), “m” 或 “M” 表示兆字節(jié),而 “g” 或 “G” 表示千兆字節(jié)。例如:200K, 3m和1G。
給定的速率是整個(gè)傳輸過程中計(jì)算的平均速度。這意味著curl可能在短時(shí)間內(nèi)使用更高的傳輸速度,但是隨著時(shí)間的推移,它只使用給定的速率。
如果多次使用此選項(xiàng),則將使用最后一個(gè)選項(xiàng)。
--local-port <num>[-num]
指定本地的一個(gè)端口或端口范圍去連接。
請注意,端口號本質(zhì)上是一種稀缺資源,有時(shí)會很忙,因此將此范圍設(shè)置為太窄可能會導(dǎo)致不必要的連接失敗。
curl --local-port 9000 http://www.baidu.com/
curl --local-port 9000-9999 http://www.baidu.com/
-m, --max-time <seconds>
允許整個(gè)操作花費(fèi)的最大時(shí)間(以秒為單位)。
這對于防止由于網(wǎng)絡(luò)或鏈接變慢而導(dǎo)致批處理作業(yè)掛起數(shù)小時(shí)非常有用。
也可參見:--connect-timeout 選項(xiàng)
1 [root@iZ28xbsfvc4Z ~]# curl -m 10 --limit-rate 5 http://www.baidu.com/ | head # 超過10秒后,斷開連接
2 % Total % Received % Xferd Average Speed Time Time Time Current
3 Dload Upload Total Spent Left Speed
4 2 2381 2 50 0 0 4 0 0:09:55 0:00:10 0:09:45 4
5 curl: (28) Operation timed out after 10103 milliseconds with 50 out of 2381 bytes received
6 <!DOCTYPE html>
7 <!--STATUS OK--><html> <head><met
8 ### 或
9 [root@iZ28xbsfvc4Z ~]# curl -m 10 https://www.zhangXX.com | head # 超過10秒后,斷開連接
10 % Total % Received % Xferd Average Speed Time Time Time Current
11 Dload Upload Total Spent Left Speed
12 0 0 0 0 0 0 0 0 --:--:-- 0:00:10 --:--:-- 0
13 curl: (28) Connection timed out after 10001 milliseconds
--max-filesize <bytes>
指定要下載的文件的最大大小(以字節(jié)為單位)。如果請求的文件大于這個(gè)值,那么傳輸將不會啟動,curl將返回退出代碼63。
示例
1 [root@iZ28xbsfvc4Z ~]# curl -I http://www.zhangblog.com/uploads/hexo/00.jpg # 正常
2 HTTP/1.1 200 OK
3 Server: nginx/1.14.2
4 Date: Thu, 04 Jul 2019 07:24:24 GMT
5 Content-Type: image/jpeg
6 Content-Length: 18196
7 Last-Modified: Mon, 24 Jun 2019 01:43:02 GMT
8 Connection: keep-alive
9 ETag: "5d102aa6-4714"
10 Accept-Ranges: bytes
11
12 [root@iZ28xbsfvc4Z ~]# echo $?
13 0
14 [root@iZ28xbsfvc4Z ~]#
15 [root@iZ28xbsfvc4Z ~]#
16 [root@iZ28xbsfvc4Z ~]# curl --max-filesize 1000 -I http://www.zhangblog.com/uploads/hexo/00.jpg # 受限異常
17 HTTP/1.1 200 OK
18 Server: nginx/1.14.2
19 Date: Thu, 04 Jul 2019 07:24:54 GMT
20 Content-Type: image/jpeg
21 curl: (63) Maximum file size exceeded
22 [root@iZ28xbsfvc4Z ~]#
23 [root@iZ28xbsfvc4Z ~]# echo $?
24 63
--max-redirs <num>
設(shè)置允許的最大重定向跟蹤數(shù)。
如果也使用了 -L, --location,則此選項(xiàng)可用于防止curl在悖論中無限重定向。默認(rèn)情況下,限制為50重定向。將此選項(xiàng)設(shè)置為-1,使其無限。
--no-keepalive
禁用在TCP連接上使用keepalive消息,因?yàn)槟J(rèn)情況下curl啟用了它們。
注意,這是文檔中已否定的選項(xiàng)名。因此,您可以使用 --keepalive 來強(qiáng)制keepalive。
常用選項(xiàng)五
-o, --output <file>
輸出到一個(gè)文件,而不是標(biāo)準(zhǔn)輸出。
如果使用 {} 或 [] 來獲取多個(gè)documents。可以使用 ‘#’ 后跟說明符中的一個(gè)數(shù)字。該變量將替換為正在獲取URL的當(dāng)前字符串。就像:
curl http://{one,two}.site.com -o "file_#1.txt"
curl http://{site,host}.host[1-5].com -o "#1_#2"
示例1
1 [root@iZ28xbsfvc4Z 20190703]# curl "http://www.zhangblog.com/2019/06/16/hexo{04,05,06}/" -o "file_#1.info" # 注意curl 的地址需要用引號括起來
2 或
3 [root@iZ28xbsfvc4Z 20190703]# curl "http://www.zhangblog.com/2019/06/16/hexo[04-06]/" -o "file_#1.info" # 注意curl 的地址需要用引號括起來
4 [1/3]: http://www.zhangblog.com/2019/06/16/hexo04/ --> file_04.info
5 % Total % Received % Xferd Average Speed Time Time Time Current
6 Dload Upload Total Spent Left Speed
7 100 97299 100 97299 0 0 1551k 0 --:--:-- --:--:-- --:--:-- 1557k
8
9 [2/3]: http://www.zhangblog.com/2019/06/16/hexo05/ --> file_05.info
10 100 54409 100 54409 0 0 172M 0 --:--:-- --:--:-- --:--:-- 172M
11
12 [3/3]: http://www.zhangblog.com/2019/06/16/hexo06/ --> file_06.info
13 100 56608 100 56608 0 0 230M 0 --:--:-- --:--:-- --:--:-- 230M
14 [root@iZ28xbsfvc4Z 20190703]#
15 [root@iZ28xbsfvc4Z 20190703]# ll
16 total 212
17 -rw-r--r-- 1 root root 97299 Jul 4 16:51 file_04.info
18 -rw-r--r-- 1 root root 54409 Jul 4 16:51 file_05.info
19 -rw-r--r-- 1 root root 56608 Jul 4 16:51 file_06.info
示例2
1 [root@iZ28xbsfvc4Z 20190703]# curl "http://www.{baidu,douban}.com" -o "site_#1.txt" # 注意curl 的地址需要用引號括起來
2 [1/2]: http://www.baidu.com --> site_baidu.txt
3 % Total % Received % Xferd Average Speed Time Time Time Current
4 Dload Upload Total Spent Left Speed
5 100 2381 100 2381 0 0 46045 0 --:--:-- --:--:-- --:--:-- 46686
6
7 [2/2]: http://www.douban.com --> site_douban.txt
8 100 162 100 162 0 0 3173 0 --:--:-- --:--:-- --:--:-- 3173
9 [root@iZ28xbsfvc4Z 20190703]#
10 [root@iZ28xbsfvc4Z 20190703]# ll
11 total 220
12 -rw-r--r-- 1 root root 2381 Jul 4 16:53 site_baidu.txt
13 -rw-r--r-- 1 root root 162 Jul 4 16:53 site_douban.txt
-O, --remote-name
寫入到本地文件,名稱與遠(yuǎn)程文件的名稱相同。(只使用遠(yuǎn)程文件的文件部分,路徑被切斷。)
用于保存的遠(yuǎn)程文件名是從給定的URL中提取的,沒有其他內(nèi)容。因此,文件將保存在當(dāng)前工作目錄中。如果希望將文件保存在另一個(gè)目錄中,請確保在curl調(diào)用 -O, --remote-name之前更改當(dāng)前工作目錄!
1 [root@iZ28xbsfvc4Z 20190712]# curl -O https://www.baidu.com # 使用了 -O 選項(xiàng),必須指定到具體的文件 錯誤使用
2 curl: Remote file name has no length!
3 curl: try 'curl --help' or 'curl --manual' for more information
4 [root@iZ28xbsfvc4Z 20190712]# curl -O https://www.baidu.com/index.html # 使用了 -O 選項(xiàng),必須指定到具體的文件 正確使用
5 % Total % Received % Xferd Average Speed Time Time Time Current
6 Dload Upload Total Spent Left Speed
7 100 2443 100 2443 0 0 13289 0 --:--:-- --:--:-- --:--:-- 13349
--pass <phrase>
(SSL/SSH)私鑰密碼
如果多次使用此選項(xiàng),則將使用最后一個(gè)選項(xiàng)。
--post301
告訴curl當(dāng)301重定向時(shí),不要將POST請求轉(zhuǎn)換為GET請求。
非rfc行為在web瀏覽器中無處不在,因此curl在缺省情況下進(jìn)行轉(zhuǎn)換以保持一致性。但是,服務(wù)器可能需要在重定向之后將POST保留為POST。
這個(gè)選項(xiàng)只有在使用 -L, --location 時(shí)才有意義
--post302
告訴curl當(dāng)302重定向時(shí),不要將POST請求轉(zhuǎn)換為GET請求。
非rfc行為在web瀏覽器中無處不在,因此curl在缺省情況下進(jìn)行轉(zhuǎn)換以保持一致性。但是,服務(wù)器可能需要在重定向之后將POST保留為POST。
這個(gè)選項(xiàng)只有在使用 -L, --location 時(shí)才有意義
--post303
告訴curl當(dāng)303重定向時(shí),不要將POST請求轉(zhuǎn)換為GET請求。
非rfc行為在web瀏覽器中無處不在,因此curl在缺省情況下進(jìn)行轉(zhuǎn)換以保持一致性。但是,服務(wù)器可能需要在重定向之后將POST保留為POST。
這個(gè)選項(xiàng)只有在使用 -L, --location 時(shí)才有意義
說明:上述三個(gè)選項(xiàng)都是為了防止在重定向過程中,原來的 POST 請求,變?yōu)?GET請求。為了防止該情況,有兩種處理方式。1、使用上述選項(xiàng)可避免;2、使用 -X POST 選項(xiàng)和命令。
示例
[root@iZ28xbsfvc4Z ~]# curl -Lsv -d 'user=zhang' https://baidu.com | head -n1
開始是POST請求,302 重定向后變?yōu)榱?GET請求。
[root@iZ28xbsfvc4Z ~]# curl -Lsv -d 'user=zhang' --post301 --post302 --post303 https://baidu.com | head -n1
前后都是 POST 請求。但是選項(xiàng)較多。
[root@iZ28xbsfvc4Z ~]# curl -Lsv -d 'user=zhang' -X POST https://baidu.com | head -n1
前后都是 POST 請求。推薦使用此命令。
--pubkey <key>
(SSH)公鑰文件名。允許在這個(gè)單獨(dú)的文件中提供公鑰。
如果多次使用此選項(xiàng),則將使用最后一個(gè)選項(xiàng)。
-r, --range <range>
(HTTP/FTP/SFTP/FILE)從HTTP/1.1、FTP或SFTP服務(wù)器或本地文件檢索字節(jié)范圍。范圍可以通過多種方式指定。用于分段下載。
有時(shí)文件比較大,或者難以迅速傳輸,而利用分段傳輸,可以實(shí)現(xiàn)穩(wěn)定、高效并且有保障的傳輸,更具有實(shí)用性,同時(shí)容易對差錯文件進(jìn)行更正。
0-499:指定前500個(gè)字節(jié)500-999:指定第二個(gè)500字節(jié)-500:指定最后500個(gè)字節(jié)9500-:指定9500字節(jié)及之后的字節(jié)0-0,-1:指定第一個(gè)和最后一個(gè)字節(jié)500-700,600-799:從偏移量500開始指定300字節(jié)100-199,500-599:指定兩個(gè)單獨(dú)100字節(jié)的范圍
分段下載
1 [root@iZ28xbsfvc4Z 20190715]# curl -I http://www.zhangblog.com/uploads/hexo/00.jpg # 查看文件大小
2 HTTP/1.1 200 OK
3 Server: nginx/1.14.2
4 Date: Mon, 15 Jul 2019 03:23:44 GMT
5 Content-Type: image/jpeg
6 Content-Length: 18196 # 文件大小
7 Last-Modified: Fri, 05 Jul 2019 08:04:58 GMT
8 Connection: keep-alive
9 ETag: "5d1f04aa-4714"
10 Accept-Ranges: bytes
11 [root@iZ28xbsfvc4Z 20190715]# curl -r 0-499 -o 00-jpg.part1 http://www.zhangblog.com/uploads/hexo/00.jpg
12 [root@iZ28xbsfvc4Z 20190715]# curl -r 500-999 -o 00-jpg.part2 http://www.zhangblog.com/uploads/hexo/00.jpg
13 [root@iZ28xbsfvc4Z 20190715]# curl -r 1000- -o 00-jpg.part3 http://www.zhangblog.com/uploads/hexo/00.jpg
查看下載文件
1 [root@iZ28xbsfvc4Z 20190715]# ll
2 total 36
3 -rw-r--r-- 1 root root 500 Jul 15 11:25 00-jpg.part1
4 -rw-r--r-- 1 root root 500 Jul 15 11:25 00-jpg.part2
5 -rw-r--r-- 1 root root 17196 Jul 15 11:26 00-jpg.part3
文件合并
1 [root@iZ28xbsfvc4Z 20190715]# cat 00-jpg.part1 00-jpg.part2 00-jpg.part3 > 00.jpg
2 [root@iZ28xbsfvc4Z 20190715]# ll
3 total 56
4 -rw-r--r-- 1 root root 18196 Jul 15 11:29 00.jpg
-R, --remote-time
使curl嘗試獲取遠(yuǎn)程文件的時(shí)間戳,如果可用,則使本地文件獲得相同的時(shí)間戳【針對修改時(shí)間戳Modify】。
curl -o nfs1.info -R http://www.zhangblog.com/2019/07/05/nfs1/
--retry <num>
傳輸出現(xiàn)問題時(shí),重試的次數(shù)。數(shù)字設(shè)置為0將使curl不重試(這是缺省值)。
出現(xiàn)的瞬時(shí)錯誤如:timeout、FTP 4xx響應(yīng)狀代碼或HTTP 5xx響應(yīng)狀代碼。
當(dāng)curl準(zhǔn)備重試傳輸時(shí),它將首先等待一秒鐘,之后對于所有即將到來的重試,它將把等待時(shí)間延長一倍,直到達(dá)到10分鐘,這將是其余重試之間的延遲。
--retry-delay <seconds>
傳輸出現(xiàn)問題時(shí),設(shè)置重試間隔時(shí)間。將此延遲設(shè)置為零將使curl使用默認(rèn)的延遲時(shí)間。
--retry-max-time <seconds>
傳輸出現(xiàn)問題時(shí),設(shè)置最大重試時(shí)間。將此選項(xiàng)設(shè)置為0則不超時(shí)重試。
常用選項(xiàng)六
-s, --silent
靜默或靜音模式。不顯示進(jìn)度表/條或錯誤消息。
示例
1 [root@iZ28xbsfvc4Z 20190713]# curl https://www.baidu.com | head -n1 # 默認(rèn)有進(jìn)度表
2 % Total % Received % Xferd Average Speed Time Time Time Current
3 Dload Upload Total Spent Left Speed
4 100 2443 100 2443 0 0 13346 0 --:--:-- --:--:-- --:--:-- 13349
5 <!DOCTYPE html>
6 [root@iZ28xbsfvc4Z 20190713]# curl -s https://www.baidu.com | head -n1
7 <!DOCTYPE html>
-S, --show-error
當(dāng)與 -s 一起使用時(shí),如果curl失敗,curl將顯示一條錯誤消息。
1 [root@iZ28xbsfvc4Z 20190713]# curl -s https://140.205.16.113/
2 [root@iZ28xbsfvc4Z 20190713]#
3 [root@iZ28xbsfvc4Z 20190713]# curl -sS https://140.205.16.113/
4 curl: (51) Unable to communicate securely with peer: requested domain name does not match the server's certificate.
--stderr <file>
將錯誤信息重定向到一個(gè)文件。如果文件名是普通的 ‘-‘,則將其寫入stdout。
如果多次使用此選項(xiàng),則將使用最后一個(gè)選項(xiàng)。
1 [root@iZ28xbsfvc4Z 20190713]# curl --stderr err.info https://140.205.16.113/
2 [root@iZ28xbsfvc4Z 20190713]# ll
3 total 92
4 -rw-r--r-- 1 root root 116 Jul 13 10:19 err.info
5 [root@iZ28xbsfvc4Z 20190713]# cat err.info
6 curl: (51) Unable to communicate securely with peer: requested domain name does not match the server's certificate.
-T, --upload-file <file>
這將指定的本地文件傳輸?shù)竭h(yuǎn)程URL。如果指定的URL中沒有文件部分,Curl將附加本地文件名。
注意:必須在最后一個(gè)目錄上使用尾隨 / 來真正證明Curl沒有文件名,否則Curl會認(rèn)為您的最后一個(gè)目錄名是要使用的遠(yuǎn)程文件名。這很可能導(dǎo)致上傳操作失敗。如果在HTTP(S)服務(wù)器上使用此命令,則將使用PUT命令。
同時(shí)也支持多個(gè)文件上傳,如下:
curl -T "{file1,file2}" http://www.uploadtothissite.com
或則
curl -T "img[1-1000].png" ftp://ftp.picturemania.com/upload/
--trace <file>
對指定文件進(jìn)行debug。包括所有傳入和傳出數(shù)據(jù)。
此選項(xiàng)會覆蓋之前使用的 -v、--verbose或 --trace-ascii。
如果多次使用此選項(xiàng),則將使用最后一個(gè)選項(xiàng)。
curl --trace trace.info https://www.baidu.com
--trace-ascii <file>
對指定文件進(jìn)行debug。包括所有傳入和傳出數(shù)據(jù)。
這非常類似于 --trace,但是省略了十六進(jìn)制部分,只顯示轉(zhuǎn)儲的ASCII部分。使它輸出更小,對于我們來說可能更容易閱讀。
此選項(xiàng)會覆蓋之前使用的 -v、--verbose或 --trace。
如果多次使用此選項(xiàng),則將使用最后一個(gè)選項(xiàng)。
curl --trace-ascii trace2.info https://www.baidu.com
--trace-time
為curl顯示的每個(gè)跟蹤或冗長的行添加時(shí)間戳。
curl --trace-ascii trace3.info --trace-time https://www.baidu.com
-v, --verbose
顯示詳細(xì)操作信息。主要用于調(diào)試。
以 > 開頭的行表示curl發(fā)送的”header data”;< 表示curl接收到的通常情況下隱藏的”header data”;而以 * 開頭的行表示curl提供的附加信息。
1 [root@iZ28xbsfvc4Z 20190712]# curl -v https://www.baidu.com
2 * About to connect() to www.baidu.com port 443 (#0)
3 * Trying 180.101.49.12...
4 * Connected to www.baidu.com (180.101.49.12) port 443 (#0)
5 * Initializing NSS with certpath: sql:/etc/pki/nssdb
6 * CAfile: /etc/pki/tls/certs/ca-bundle.crt
7 CApath: none
8 * SSL connection using TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
9 * Server certificate:
10 * subject: CN=baidu.com,O="Beijing Baidu Netcom Science Technology Co., Ltd",OU=service operation department,L=beijing,ST=beijing,C=CN
11 * start date: May 09 01:22:02 2019 GMT
12 * expire date: Jun 25 05:31:02 2020 GMT
13 * common name: baidu.com
14 * issuer: CN=GlobalSign Organization Validation CA - SHA256 - G2,O=GlobalSign nv-sa,C=BE
15 > GET / HTTP/1.1
16 > User-Agent: curl/7.29.0
17 > Host: www.baidu.com
18 > Accept: */*
19 >
20 < HTTP/1.1 200 OK
21 < Accept-Ranges: bytes
22 < Cache-Control: private, no-cache, no-store, proxy-revalidate, no-transform
23 < Connection: Keep-Alive
24 < Content-Length: 2443
25 < Content-Type: text/html
26 < Date: Fri, 12 Jul 2019 08:26:23 GMT
27 < Etag: "588603eb-98b"
28 < Last-Modified: Mon, 23 Jan 2017 13:23:55 GMT
29 < Pragma: no-cache
30 < Server: bfe/1.0.8.18
31 < Set-Cookie: BDORZ=27315; max-age=86400; domain=.baidu.com; path=/
32 <
33 <!DOCTYPE html>
34 ……………… # curl 網(wǎng)頁的具體信息
-w, --write-out <format>
在完成和成功操作后要在stdout上顯示什么。
支持如下變量,具體含義請自行參見curl文檔。
content_type
filename_effective
ftp_entry_path
http_code
http_connect
local_ip
local_port
num_connects
num_redirects
redirect_url
remote_ip
remote_port
size_download
size_header
size_request
size_upload
speed_download
speed_upload
ssl_verify_result
time_appconnect
time_connect
time_namelookup
time_pretransfer
time_redirect
time_starttransfer
time_total
url_effective
示例
1 [root@iZ28xbsfvc4Z 20190713]# curl -o /dev/null -s -w %{content_type} www.baidu.com # 輸出結(jié)果沒有換行
2 text/html[root@iZ28xbsfvc4Z 20190713]#
3 [root@iZ28xbsfvc4Z 20190713]# curl -o /dev/null -s -w %{http_code} www.baidu.com # 輸出結(jié)果沒有換行
4 200[root@iZ28xbsfvc4Z 20190713]#
5 [root@iZ28xbsfvc4Z 20190713]# curl -o /dev/null -s -w %{local_port} www.baidu.com # 輸出結(jié)果沒有換行
6 37346[root@iZ28xbsfvc4Z 20190713]#
7 [root@iZ28xbsfvc4Z 20190713]#
-x, --proxy <[protocol://][user:password@]proxyhost[:port]>
使用指定的HTTP代理。如果沒有指定端口號,則假定它位于端口1080。
-X, --request <command>
(HTTP)指定與HTTP服務(wù)器通信時(shí)的請求方式。默認(rèn)GET
curl -vs -X POST https://www.baidu.com | head -n1
curl -vs -X PUT https://www.baidu.com | head -n1