Linux curl 命令詳解

来源:https://www.cnblogs.com/zhanglianghhh/archive/2019/08/09/11326428.html
-Advertisement-
Play Games

命令概要 該命令設計用於在沒有用戶交互的情況下工作。 curl 是一個工具,用於傳輸來自伺服器或者到伺服器的數據。「向伺服器傳輸數據或者獲取來自伺服器的數據」 可支持的協議有(DICT、FILE、FTP、FTPS、GOPHER、HTTP、HTTPS、IMAP、IMAPS、LDAP、LDAPS、POP ...


 

命令概要

該命令設計用於在沒有用戶交互的情況下工作。

curl 是一個工具,用於傳輸來自伺服器或者到伺服器的數據。「向伺服器傳輸數據或者獲取來自伺服器的數據」

可支持的協議有(DICT、FILE、FTP、FTPS、GOPHER、HTTP、HTTPS、IMAP、IMAPS、LDAP、LDAPS、POP3、POP3S、RTMP、RTSP、SCP、SFTP、SMTP、SMTPS、TELNET和TFTP)。

curl提供了大量有用的技巧,比如代理支持、用戶身份驗證、FTP上傳、HTTP post、SSL連接、cookie、文件斷點續傳、Metalink等等。正如你將在下麵看到的,這些特性的數量會讓您頭暈目眩!

 

訪問的URL

你可以在命令行上指定任意數量的url。它們將按指定的順序依次獲取。

你可以指定多個url,或url的部分通過在花括弧內編寫部分集,如:

1 http://site.{one,two,three}.com
2 # 參見
3 curl http://www.zhangblog.com/2019/06/16/hexo{04,05,06}/ -I  # 查看信息

 

或者可以使用[]得到字母數字序列的序列,如:

1 ftp://ftp.numericals.com/file[1-100].txt
2 ftp://ftp.numericals.com/file[001-100].txt   # 前導用零
3 ftp://ftp.letters.com/file[a-z].txt 
4 # 參見
5 curl http://www.zhangblog.com/2019/06/16/hexo[04-06]/ -I     # 查看信息

 

不支持嵌套序列,但可以使用幾個相鄰的序列:

http://any.org/archive[1996-1999]/vol[1-4]/part{a,b,c}.html

 

你可以指定一個步長計數器的範圍,以獲得每第n個數字或字母:

http://www.numericals.com/file[1-100:10].txt 
http://www.letters.com/file[a-z:2].txt

 

如果指定URL而沒有protocol:// prefix,預設為HTTP。

 

常用選項一

curl通常在操作過程中顯示一個進度表,顯示傳輸的數據量、傳輸速度和估計的剩餘時間等。

-#, --progress-bar

將curl進度顯示為一個簡單的進度條;而不是標準的、具有更多信息的進度表。

1 [root@iZ28xbsfvc4Z 20190702]# curl -O http://www.zhangblog.com/2019/06/16/hexo04/index.html  # 預設的進度表
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  #簡單的進度條
7 ######################################################################## 100.0%

 

-0, --http1.0

(HTTP)強制curl使用HTTP 1.0發出請求,而不是使用其內部首選的HTTP 1.1。

-1, --tlsv1

(SSL)強制curl使用TLS 1.x 版本,當與遠程TLS服務進行協商時。
可以使用選項 --tlsv1.0、--tlsv1.1和 --tlsv1.2來更精確地控制TLS版本(如果使用的SSL後端支持這種級別的控制)。

-2, --sslv2

(SSL)強制curl使用TLS 2 版本,當與遠程TLS服務進行協商時。

-3, --sslv3

(SSL)強制curl使用TLS 3 版本,當與遠程TLS服務進行協商時。

-4, --ipv4

如果curl能夠將一個地址解析為多個IP版本(比如它支持ipv4和ipv6),那麼這個選項告訴curl只將名稱解析為IPv4地址。

-6, --ipv6

如果curl能夠將一個地址解析為多個IP版本(比如它支持ipv4和ipv6),那麼這個選項告訴curl只將名稱解析為IPv6地址。

-a, --append

(FTP/SFTP)當在上傳中使用時,這將告訴curl追加到目標文件而不是覆蓋它。如果文件不存在,將創建它。註意,一些SSH伺服器(包括OpenSSH)會忽略此標誌。

-A, --user-agent <agent string>

(HTTP)指定要發送到HTTP服務端的User-Agent字元串。當然也可以使用 -H, --header 選項來設置。
用於模擬客戶端,如:谷歌瀏覽器、火狐瀏覽器、IE 瀏覽器等等。

如果多次使用此選項,則將使用最後一個選項。

模仿瀏覽器訪問

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基本身份驗證。這是預設的。

 

常用選項二

(HTTP)將數據作為cookie傳遞給HTTP伺服器。它應該是之前從服務端接收到的“Set-Cookie:”行中的數據。數據格式為“NAME1=VALUE1;NAME2 = VALUE2”。

如果行中沒有使用 ‘=’ 符號,則將其視為一個文件名,用於讀取先前存儲的cookie行,如果它們匹配,則應在此會話中使用。
要讀取cookie文件的文件格式應該是純HTTP頭文件或Netscape/Mozilla cookie文件格式。

註意:使用 -b, --cookie 指定的文件僅用作輸入。文件中不會存儲cookies。要存儲cookies,可以使用 -c, --cookie-jar 選項,或者您甚至可以使用 -D, --dump-header 將HTTP頭保存到文件中。

(HTTP)指定希望curl在完成操作後將所有cookie寫入哪個文件。
Curl寫之前從指定文件讀取的所有cookie,以及從遠程服務端接收的所有cookie。
如果沒有已知的cookie,則不會寫入任何文件。該文件將使用Netscape cookie文件格式編寫。如果你將文件名設置為單個破折號 “-” ,cookie將被標準輸出。

該命令行選項將激活cookie引擎,使curl記錄並使用cookies。激活它的另一種方法是使用 -b, --cookie 選項。

如果不能創建或寫入cookie jar,那麼整個curl操作就不會失敗,甚至不能清楚地報告錯誤。使用 -v 會得到一個警告,但這是你得到的關於這種可能致命的情況的唯一可見反饋。

如果多次使用此選項,將使用最後指定的文件名。

--connect-timeout <seconds>

連接服務端的超時時間。這隻限制了連接階段,一旦curl連接了此選項就不再使用了。

也可參見:-m, --max-time 選項。

1 # 當前 https://www.zhangXX.com 是國外伺服器,訪問受限
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

當與 -o 選項一起使用時,curl將根據需要創建必要的本地目錄層次結構。

這個選項只創建與 -o 選項相關的dirs,沒有其他內容。如果 -o 文件名沒有使用dir,或者其中提到的dir已經存在,則不會創建dir。

示例

curl -o ./hexo04/index.html --create-dirs http://www.zhangblog.com/2019/06/16/hexo04

 

-C, --continue-at <offset>

按給定偏移量繼續/恢復以前的文件傳輸。給定的偏移量是將被跳過的確切位元組數,從源文件的開頭開始計算,然後再將其傳輸到目標文件。

使用 “-C -“「註意有空格和無空格的情況」,告訴curl自動找出在哪裡/如何恢復傳輸。然後,它使用給定的輸出/輸入文件來解決這個問題。

1 # 下載一個 2G 的文件,可以反覆測試,查看結果
2 curl -C - -o tmp.data http://www.zhangblog.com/uploads/tmp/tmp.data

 

-d, --data <data>

使用該選項,那麼預設請求方式為 POST。
(HTTP)在POST請求中向HTTP伺服器發送指定的數據,與瀏覽器在用戶填寫HTML表單並按下submit按鈕時所做的相同。這將導致curl使用content-type application/x-www-form-urlencoded將數據傳遞給伺服器。也可參見:-F,-form 。

如果這些命令在同一個命令行使用多次,這些數據片段將使用指定的分隔符 & 合併。
因此,使用 ‘-d name=daniel -d skill=lousy’ 將生成一個類似 ‘name=daniel&skill=lousy’ 的post塊,也可以直接這樣合併使用。

-d, --data 與 --data-ascii 相同。post數據為純粹的二進位數據時,那麼使用 --data-binary 選項。要對錶單欄位的值進行url編碼,可以使用 --data-urlencode。

如果您以字母@開始數據,那麼其餘的應該是一個文件名,以便從其中讀取數據。或者 - 如果您希望curl從stdin【標準輸入】讀取數據。文件的內容必須已經是url編碼的。還可以指定多個文件。因此,Posting數據名為 “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數據完全按照指定的方式,沒有任何額外的處理。

如果您以字母@開始數據,其餘的應該是文件名。
數據是以類似於 --data-ascii 的方式發佈的,只不過保留了換行,而且永遠不會進行轉換【數據不轉換】。

如果多次使用此選項,第一個選項後面的選項將按照 -d, --data 中的描述追加數據。

--data-urlencode <data>

(HTTP)這個Post 數據,與另一個 --data 選項類似,除執行url編碼以外。

-D, --dump-header <file>

將響應協議頭寫入指定的文件。

如果多次使用此選項,則將使用最後一個選項。

當你想要存儲HTTP站點發送給你的頭文件時,使用此選項非常方便。

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調用通過 -b, --cookie 選項,可以從頭部讀取 cookies 。然而 -c, --cookie-jar 選項是存儲 cookies 更好的方法。

常用選項三

--digest

(HTTP)啟用HTTP摘要身份驗證。這是一種身份驗證方案,可以防止密碼以明文通過網路發送。將此選項與普通的 -u, --user 選項組合使用,以設置用戶名和密碼。
相關選項請參見 --ntlm, --negotiate 和 --anyauth。

如果多次使用此選項,則只使用第一個選項。

-e, --referer <URL>

(HTTP)將 “Referer Page” 【從哪個頁面跳轉過來的】信息發送到HTTP伺服器。當然也可以使用 -H, --header 標誌來設置。

如果多次使用此選項,則將使用最後一個選項。

curl -e 'https:www.baidu.com' http://www.zhangblog.com/2019/06/24/domainexpire/

-f, --fail

(HTTP)在伺服器錯誤上靜默失敗(完全沒有輸出)。這主要是為了使腳本等更好地處理失敗的嘗試。

在通常情況下,當HTTP伺服器無法交付文檔時,它會返回一個HTML文檔,說明原因(通常還會描述原因)。此標誌將阻止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數據。也可以上傳二進位文件等。

@文件名:使一個文件作為文件上傳附加在post中。
<文件名:從文件中獲取該文本欄位的內容。

例如,要將密碼文件發送到伺服器,其中“password”是表單欄位的名稱,/etc/passwd將作為輸入:

curl -F password=@/etc/passwd www.mypasswords.com

 

您還可以使用 ‘type=’ 告訴curl使用什麼 Content-Type ,方法類似於:

curl -F "[email protected];type=text/html" url.com
或
curl -F "name=daniel;type=text/foo" url.com

 

可以通過設置 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

最外層可用單引號或雙引號。

這個選項可以多次使用。

 

請勿如下使用

curl -F 'user=zhang&password=pwd' url.com   # 這種用法是錯誤的

 

--form-string <name=string>

(HTTP)類似於 --form,只是命名參數的value字元串按字面意思使用。
在值中以 ‘@’ 和 ‘<’ 開頭的字元,以及 ‘;type=’ 字元串沒有特殊的含義。

如果字元串值有可能意外觸發 --form 的 “@” 或 “<” 特性,請優先使用此選項。

-g, --globoff

這個選項關閉了“URL全局解析器”。當您設置這個選項時,您可以指定包含字母 {}[] 的url,而不需要curl本身來解釋它們。

註意,這些字母不是正常的合法URL內容,但是它們應該按照URI標準進行編碼。

-G, --get

使用此選項時,將使所有使用 -d, --data 或 --data-binary 指定的數據在HTTP GET請求中使用,而不是在POST請求中使用。
數據將被追加到URL的一個 ‘?’ 的分隔符後。

如果與 -I 結合使用,POST數據將被替換追加到帶有HEAD請求的URL中。

如果多次使用此選項,則只使用第一個選項。

示例

 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,且參數追加到了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) 要發送到服務端的自定義請求頭。

此選項可多次用於添加/替換/刪除多個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)在輸出的內容中包含HTTP 頭信息。

curl -i https://www.baidu.com

 

-I, --head

(HTTP/FTP/FILE)只獲取HTTP頭文件。
在FTP或FILE 文件上使用時,curl只顯示文件大小和最後修改時間。

curl -I https://www.baidu.com

 

-k, --insecure

(SSL)允許curl執行不安全的SSL連接和傳輸。
所有SSL連接都嘗試使用預設安裝的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/  # 允許執行不安全的證書連接
 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>

 

常用選項四

--keepalive-time <seconds>

keepalive 時長。如果使用no-keepalive,則此選項無效。

如果多次使用此選項,則將使用最後一個選項。如果未指定,該選項預設為60秒。

--key <key>

(SSL/SSH)私鑰文件名。允許你在這個單獨的文件中提供你的私鑰。

對於SSH,如果沒有指定,curl嘗試如下順序:’~/.ssh/id_rsa’,’~/.ssh/id_dsa’,’./id_rsa’,’./id_dsa’。

如果多次使用此選項,則將使用最後一個選項。

--key-type <type>

(SSL)私鑰文件類型。指定 --key 提供的私鑰的類型。支持DER、PEM和ENG。如果沒有指定,則定為PEM。

如果多次使用此選項,則將使用最後一個選項。

-L, --location

(HTTP/HTTPS) 跟蹤重定向
如果伺服器報告請求頁面已移動到另一個位置(用location: header和3XX響應代碼表示),此選項將使curl在新位置上重做請求。

如果與 -i, --include 或 -I, --head 一起使用,將顯示所有請求頁面的標題。

 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的最大傳輸速率。

如果有一個有限的管道,並且希望傳輸不要使用您的全部帶寬,那麼這個特性是非常有用的。

curl --limit-rate 500 http://www.baidu.com/
curl --limit-rate 2k http://www.baidu.com/

單位:預設位元組,除非添加尾碼。附加 “k” 或 “K” 表示千位元組, “m” 或 “M” 表示兆位元組,而 “g” 或 “G” 表示千兆位元組。例如:200K, 3m和1G。

給定的速率是整個傳輸過程中計算的平均速度。這意味著curl可能在短時間內使用更高的傳輸速度,但是隨著時間的推移,它只使用給定的速率。

如果多次使用此選項,則將使用最後一個選項。

--local-port <num>[-num]

指定本地的一個埠或埠範圍去連接。

請註意,埠號本質上是一種稀缺資源,有時會很忙,因此將此範圍設置為太窄可能會導致不必要的連接失敗。

curl --local-port 9000 http://www.baidu.com/
curl --local-port 9000-9999 http://www.baidu.com/

 

-m, --max-time <seconds>

允許整個操作花費的最大時間(以秒為單位)。

這對於防止由於網路或鏈接變慢而導致批處理作業掛起數小時非常有用。

也可參見:--connect-timeout 選項

 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>

指定要下載的文件的最大大小(以位元組為單位)。
如果請求的文件大於這個值,那麼傳輸將不會啟動,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>

設置允許的最大重定向跟蹤數。

如果也使用了 -L, --location,則此選項可用於防止curl在悖論中無限重定向。
預設情況下,限製為50重定向。將此選項設置為-1,使其無限。

--no-keepalive

禁用在TCP連接上使用keepalive消息,因為預設情況下curl啟用了它們。

註意,這是文檔中已否定的選項名。因此,您可以使用 --keepalive 來強制keepalive。

常用選項五

-o, --output <file>

輸出到一個文件,而不是標準輸出。

如果使用 {} 或 [] 來獲取多個documents。可以使用 ‘#’ 後跟說明符中的一個數字。該變數將替換為正在獲取URL的當前字元串。就像:

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

寫入到本地文件,名稱與遠程文件的名稱相同。(只使用遠程文件的文件部分,路徑被切斷。)

用於保存的遠程文件名是從給定的URL中提取的,沒有其他內容。
因此,文件將保存在當前工作目錄中。如果希望將文件保存在另一個目錄中,請確保在curl調用 -O, --remote-name之前更改當前工作目錄!

1 [root@iZ28xbsfvc4Z 20190712]# curl -O https://www.baidu.com   # 使用了 -O 選項,必須指定到具體的文件  錯誤使用
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 選項,必須指定到具體的文件  正確使用
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)私鑰密碼

如果多次使用此選項,則將使用最後一個選項。

--post301

告訴curl當301重定向時,不要將POST請求轉換為GET請求。

非rfc行為在web瀏覽器中無處不在,因此curl在預設情況下進行轉換以保持一致性。但是,伺服器可能需要在重定向之後將POST保留為POST。

這個選項只有在使用 -L, --location 時才有意義

--post302

告訴curl當302重定向時,不要將POST請求轉換為GET請求。

非rfc行為在web瀏覽器中無處不在,因此curl在預設情況下進行轉換以保持一致性。但是,伺服器可能需要在重定向之後將POST保留為POST。

這個選項只有在使用 -L, --location 時才有意義

--post303

告訴curl當303重定向時,不要將POST請求轉換為GET請求。

非rfc行為在web瀏覽器中無處不在,因此curl在預設情況下進行轉換以保持一致性。但是,伺服器可能需要在重定向之後將POST保留為POST。

這個選項只有在使用 -L, --location 時才有意義

說明:
上述三個選項都是為了防止在重定向過程中,原來的 POST 請求,變為 GET請求。為了防止該情況,有兩種處理方式。
1、使用上述選項可避免;
2、使用 -X POST 選項和命令。

示例

[root@iZ28xbsfvc4Z ~]# curl -Lsv -d 'user=zhang' https://baidu.com | head -n1

 

開始是POST請求,302 重定向後變為了 GET請求。

 

[root@iZ28xbsfvc4Z ~]# curl -Lsv -d 'user=zhang' --post301 --post302 --post303 https://baidu.com | head -n1

前後都是 POST 請求。但是選項較多。

 

[root@iZ28xbsfvc4Z ~]# curl -Lsv -d 'user=zhang' -X POST https://baidu.com | head -n1

前後都是 POST 請求。推薦使用此命令。

 

--pubkey <key>

(SSH)公鑰文件名。允許在這個單獨的文件中提供公鑰。

如果多次使用此選項,則將使用最後一個選項。

-r, --range <range>

(HTTP/FTP/SFTP/FILE)從HTTP/1.1、FTP或SFTP伺服器或本地文件檢索位元組範圍。範圍可以通過多種方式指定。用於分段下載。

有時文件比較大,或者難以迅速傳輸,而利用分段傳輸,可以實現穩定、高效並且有保障的傳輸,更具有實用性,同時容易對差錯文件進行更正。

0-499:指定前500個位元組
500-999:指定第二個500位元組
-500:指定最後500個位元組
9500-:指定9500位元組及之後的位元組
0-0,-1:指定第一個和最後一個位元組
500-700,600-799:從偏移量500開始指定300位元組
100-199,500-599:指定兩個單獨100位元組的範圍

分段下載

 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
              
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...