15 個實用的 Linux cURL 命令示例(cURL 下載示例)
cURL 是一個軟件包,由命令行工具和使用 URL 語法傳輸數據的庫組成。

cURL 支持各種協議,如 DICT、FILE、FTP、FTPS、Gopher、HTTP、HTTPS、IMAP、IMAPS、LDAP、LDAPS、POP3、POP3S、RTMP、RTSP、SCP、SFTP、SMTP、SMTPS、Telnet 和 TFTP。
本文提供了 15 個實用的 cURL 使用示例。
1. 下載單個文件
以下命令將獲取 URL 的內容并將其顯示在 STDOUT 中(即在您的終端上)。
$ curl http://www.centos.org
要將輸出存儲在文件中,您可以將其重定向,如下所示。這還將顯示一些額外的下載統計信息。
$ curl http://www.centos.org > centos-org.html % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 27329 0 27329 0 0 104k 0 --:--:-- --:--:-- --:--:-- 167k
2. 將 cURL 輸出保存到文件
我們可以使用 -o/-O 選項將 curl 命令的結果保存到文件中。
-o(小寫 o)結果將保存在命令行中提供的文件名中
-O(大寫O)URL中的文件名將被用作存儲結果的文件名
$ curl -o mygettext.html http://www.gnu.org/software/gettext/manual/gettext.html
現在頁面 gettext.html 將保存在名為“mygettext.html”的文件中。您還可以注意到,當使用 -o 選項運行 curl 時,它會顯示下載進度表,如下所示。
% Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 66 1215k 66 805k 0 0 33060 0 0:00:37 0:00:24 0:00:13 45900 100 1215k 100 1215k 0 0 39474 0 0:00:31 0:00:31 --:--:-- 68987
當您使用 curl -O(大寫 O)時,它會將內容保存在本地機器中名為“gettext.html”的文件中。
$ curl -O http://www.gnu.org/software/gettext/manual/gettext.html
注意:當 curl 必須將數據寫入終端時,它會禁用進度表,以避免打印混亂。我們可以使用 '>'|'-o'|'-O' 選項將結果移動到文件中。
3. 一次獲取多個文件
我們可以通過在命令行上指定 URL 來一次性下載多個文件。
句法:
$ curl -O URL1 -O URL2
下面的命令將下載 index.html 和 gettext.html 并將其保存在當前目錄下的相同名稱中。
$ curl -O http://www.gnu.org/software/gettext/manual/html_node/index.html -O http://www.gnu.org/software/gettext/manual/gettext.html
請注意,當我們從同一個服務器下載多個文件時,如上圖所示,curl 會嘗試重新使用連接。
4. 使用 -L 選項跟隨 HTTP 位置標頭
默認情況下,CURL 不遵循 HTTP 位置標頭。它也被稱為重定向。當請求的網頁移動到另一個地方時,HTTP 位置標頭將作為響應發送,它將包含實際網頁所在的位置。
例如,當有人在印度的瀏覽器中輸入 google.com 時,它會自動重定向到“google.co.in”。這是基于 HTTP 位置標頭完成的,如下所示。
$ curl http://www.google.com
302 Moved
The document has moved here上面的輸出表明請求的文檔已移至“http://www.google.co.in/”。
我們可以使用 -L 選項堅持 curl 跟隨重定向,如下所示。現在它將下載 google.co.in 的 html 源代碼。
$ curl -L http://www.google.com
5. 繼續/恢復以前的下載
使用 curl -C 選項,您可以繼續下載由于某種原因已經停止的下載。當您下載大文件并且下載中斷時,這將很有幫助。
如果我們說“-C -”,那么 curl 會找到從哪里開始恢復下載。我們也可以給出一個偏移量'-C
使用 curl 開始大下載,然后按 Ctrl-C 停止下載。
$ curl -O http://www.gnu.org/software/gettext/manual/gettext.html ############## 20.1%
注意:-# 用于顯示進度條而不是進度表。
現在上述下載停止在 20.1%。使用“curl -C -”,我們可以從之前停止的地方繼續下載。現在下載量從 20.1% 開始。
curl -C - -O http://www.gnu.org/software/gettext/manual/gettext.html ############### 21.1%
6. 限制數據傳輸速率
您可以使用 –limit-rate 選項限制數據傳輸的數量。您可以指定最大傳輸速率作為參數。
$ curl --limit-rate 1000B -O http://www.gnu.org/software/gettext/manual/gettext.html
上述命令將數據傳輸限制為 1000 字節/秒。curl 可能會在短時間內使用更高的傳輸速率。但平均而言,它會達到 1000B/秒。
以下是上述命令的進度表。可以看到當前速度接近1000 Bytes。
% Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 1 1215k 1 13601 0 0 957 0 0:21:40 0:00:14 0:21:26 999 1 1215k 1 14601 0 0 960 0 0:21:36 0:00:15 0:21:21 999 1 1215k 1 15601 0 0 962 0 0:21:34 0:00:16 0:21:18 999
7.只有在給定時間之前/之后修改的文件才下載
我們可以使用 curl 中的 -z 選項獲取特定時間后修改的文件。這將適用于 FTP 和 HTTP。
$ curl -z 21-Dec-11 http://www.example.com/yy.html
上面的命令將下載 yy.html 只有當它被修改晚于給定的日期和時間
$ curl -z -21-Dec-11 http://www.example.com/yy.html
如果在給定的日期和時間之前修改了 yy.html,則上面的命令將下載 yy.html。
有關日期表達式支持的各種語法,請參閱“man curl_getdate”
8. 在 cURL 中通過 HTTP 身份驗證
有時,網站需要用戶名和密碼才能查看內容(可以使用 .htaccess 文件完成)。在 -u 選項的幫助下,我們可以將這些憑據從 cURL 傳遞到 Web 服務器,如下所示。
$ curl -u username:password URL
注意:默認情況下 curl 使用基本 HTTP 身份驗證。我們可以使用 -ntlm | 指定其他身份驗證方法。-消化。
9. 從 FTP 服務器下載文件
cURL 也可用于從 FTP 服務器下載文件。如果給定的 FTP 路徑是一個目錄,默認情況下它會列出特定目錄下的文件。
$ curl -u ftpuser:ftppass -O ftp://ftp_server/public_html/xss.php
上述命令將從ftp服務器下載xss.php文件并保存在本地目錄中。
$ curl -u ftpuser:ftppass -O ftp://ftp_server/public_html/
這里,給定的 URL 指的是一個目錄。所以 cURL 會列出給定 URL 下的所有文件和目錄
10. 使用范圍列出/下載
cURL 支持在 URL 中給出的范圍。當給定范圍時,將下載在范圍內匹配的文件。從 FTP 鏡像站點下載包會很有幫助。
$ curl ftp://ftp.uk.debian.org/debian/pool/main/[az]/
上面的命令將在終端中列出 az 范圍中的所有包。
11.上傳文件到FTP服務器
Curl 也可用于通過 -T 選項將文件上傳到 FTP 服務器。
$ curl -u ftpuser:ftppass -T myfile.txt ftp://ftp.testserver.com
上述命令會將名為 myfile.txt 的文件上傳到 FTP 服務器。您還可以使用范圍操作同時上傳多個文件。
$ curl -u ftpuser:ftppass -T "{file1,file2}" ftp://ftp.testserver.com
我們可以選擇使用“.”?從 STDIN 獲取輸入并傳輸到遠程。
$ curl -u ftpuser:ftppass -T - ftp://ftp.testserver.com/myfile_1.txt
上面的命令將從標準輸入中獲取用戶的輸入,并將內容保存在 ftp 服務器中,名稱為“myfile_1.txt”。
您可以為每個 URL 提供一個“-T”,這對指定要上傳的內容。
12. 使用 Verbose 和 Trace 選項的更多信息
您可以使用 -v 選項了解正在發生的事情。-v 選項啟用詳細模式,它將打印詳細信息
curl -v http://google.co.in
about 命令將輸出以下內容
* About to connect() to www.google.com.in port 80 (#0) * Trying 74.125.236.56... connected * Connected to www.google.co.in (74.125.236.56) port 80 (#0) > GET / HTTP/1.1 > User-Agent: curl/7.21.0 (i486-pc-linux-gnu) libcurl/7.21.0 OpenSSL/0.9.8o zlib/1.2.3.4 libidn/1.15 libssh2/1.2.6 > Host: www.google.co.in > Accept: */* > * HTTP 1.0, assume close after body < HTTP/1.0 200 OK < Date: Tue, 10 Apr 2012 11:18:39 GMT < Expires: -1 < Cache-Control: private, max-age=0 < Content-Type: text/html; charset=ISO-8859-1 < Set-Cookie: PREF=ID=7c497a6b15cc092d:FF=0:TM=1334056719:LM=1334056719:S=UORpBwxFmTRkbXLj; expires=Thu, 10-Apr-2014 11:18:39 GMT; path=/; domain=.google.co.in . .
如果您需要更詳細的信息,則可以使用 –trace 選項。跟蹤選項將啟用所有傳入/傳出數據到給定文件的完整跟蹤轉儲
=> Send header, 169 bytes (0xa9) 0000: 47 45 54 20 2f 20 48 54 54 50 2f 31 2e 31 0d 0a GET / HTTP/1.1.. 0010: 55 73 65 72 2d 41 67 65 6e 74 3a 20 63 75 72 6c User-Agent: curl .. 0060: 2e 32 2e 33 2e 34 20 6c 69 62 69 64 6e 2f 31 2e .2.3.4 libidn/1.
0070: 31 35 20 6c 69 62 73 73 68 32 2f 31 2e 32 2e 36 15 libssh2/1.2.6 0080: 0d 0a 48 6f 73 74 3a 20 77 77 77 2e 67 6f 6f 67 ..Host: www.goog 0090: 6c 65 2e 63 6f 2e 69 6e 0d 0a 41 63 63 65 70 74 le.co.in..Accept 00a0: 3a 20 2a 2f 2a 0d 0a 0d 0a : */*.... == Info: HTTP 1.0, assume close after body <= Recv header, 17 bytes (0x11) 0000: 48 54 54 50 2f 31 2e 30 20 32 30 30 20 4f 4b 0d HTTP/1.0 200 OK. 0010: 0a
當 curl 由于某種原因失敗而我們不知道為什么時,這個詳細和跟蹤選項會派上用場。
13. 使用 DICT 協議獲取單詞的定義
您可以在 DICT 協議的幫助下使用 cURL 獲取單詞的定義。我們需要將字典服務器 URL 傳遞給它。
$ curl dict://dict.org/d:bash
上面的命令將列出bash的含義如下
151 "Bash" gcide "The Collaborative International Dictionary of English v.0.48" Bash \Bash\, v. t. [imp. & p. p. {Bashed}; p. pr. & vb. n. {Bashing}.] [Perh. of imitative origin; or cf. Dan. baske to strike, bask a blow, Sw. basa to beat, bas a beating.] To strike heavily; to beat; to crush. [Prov. Eng. & Scot.] --Hall Caine. [1913 Webster] Bash her open with a rock. --Kipling. [Webster 1913 Suppl.] . 151 "Bash" gcide "The Collaborative International Dictionary of English v.0.48" Bash \Bash\, n. 1. a forceful blow, especially one that does damage to its target. [PJC] . .
現在你可以看到它使用了“The Collaborative International Dictionary of English”。有很多詞典可用。我們可以使用列出所有字典
$ curl dict://dict.org/show:db jargon "The Jargon File (version 4.4.7, 29 Dec 2019)" foldoc "The Free On-line Dictionary of Computing (26 July 2019)" easton "Easton's 1897 Bible Dictionary" hitchcock "Hitchcock's Bible Names Dictionary (late 1800's)" bouvier "Bouvier's Law Dictionary, Revised 6th Ed (1856)"
現在為了在計算機中找到Bash的實際含義我們可以在“foldoc”字典中搜索bash如下
$ curl dict://dict.org/d:bash:foldoc
結果將是,
bash Bourne Again SHell. {GNU}'s {command interpreter} for {Unix}. Bash is a {Posix}-compatible {shell} with full {Bourne shell} syntax, and some {C shell} commands built in. The Bourne Again Shell supports {Emacs}-style command-line editing, job control, functions, and on-line help. Written by Brian Fox of {UCSB}.
14.使用代理下載文件
我們可以使用 -x 選項指定 cURL 使用代理來執行特定操作。我們需要指定代理的主機和端口。
$ curl -x proxysever.test.com:3128 http://google.com.in
15. 使用 SMTP 協議發送郵件
cURL 也可用于使用 SMTP 協議發送郵件。您應該指定發件人地址、收件人地址和郵件服務器 IP 地址,如下所示。
$ curl --mail-from blah@test.com --mail-rcpt tiamo@test.com smtp://mailserver.com
一旦輸入上述命令,它將等待用戶提供數據到郵件。編寫完消息后,鍵入 。(句號) 作為最后一行,將立即發送電子郵件。
Subject: Testing This is a test mail .
FTP Linux PHP
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。