在以前看過的一篇“對話 Unix操作系統” 中推薦使用 wget 從命令行直接下載文件。在Unix操作系統中在無法使用 Web 浏覽器的情況下,在 Unix操作系統shell 腳本中使用 wget 是非常合適的。例如,如果要在遠程服務器上安裝新軟件,wget 確實可以節省時間。
如果您喜歡 wget,也一定會喜歡 cURL。與 wget 一樣,cURL 可以下載文件,但是它還可以向 Web 頁面表單提交數據、通過 File Transfer Protocol (FTP) 上傳文件、作為代理、設置 Hypertext Transfer Protocol (HTTP) 頭等等。cURL 在許多方面可以作為浏覽器和其他客戶機的命令行替代品。因此,它有許多潛在的應用。
通過Unix操作系統常用的 ./configure && make && sudo make install 過程構建 cURL 實用程序。下載、解壓並處理:
- $ wget http://curl.haxx.se/download/curl-7.19.4.tar.gz
- $ tar xzf curl-7.19.4.tar.gz
- $ cd curl-7.19.4
- $ ./configure && make && sudo make install
cURL 實用程序有很多選項,最好通讀它的手冊頁。下面是一些常見的 cURL 用法:
為了下載一個文件(比如 cURL tarball 本身),使用:
$ curl -o curl.tgz http://curl.haxx.se/download/curl-7.19.4.tar.gz
與 wget 不同,cURL 把它下載的東西發送到 stdout。使用 -o 選項把下載的東西保存到指定的文件。
為了下載大量文件,可以提供序列、集或同時提供這兩者。序列 是放在方括號([])中的一個數字范圍;集 是放在花括號({})中的逗號分隔的列表。例如,下面的命令從目錄 archive1996/vol1 到 archive1999/vol4(含)下載名為 parta.html、partb.html 和 partc.html 的所有文件,共有 48 個文件。
- $ curl http://any.org/archive[1996-1999]/vol[1-4]/part{a,b,c}.html \
- -o "archive#1_vol#2_part#3.html"
在指定序列或集時,可以提供 -o 選項和一個模板,模板中的 #1 替換為第一個序列或集的當前值,#2 是第二個序列或集的占位符,以此類推。另外,還可以提供 -O 選項以保持每個文件名不變。
為了把一組圖像上傳到Unix操作系統服務器,可以使用 -T 選項:
$ curl -T "img[1-1000].png" ftp://ftp.example.com/upload/
在這裡,把 img[1-1000].png 放在引號中,以避免 shell 解釋它。這個命令把 img1.png 到 img1000.png 上傳到指定的服務器和路徑。
Unix操作系統甚至可以用 cURL 在詞典中查找單詞:
- $ curl dict://dict.org/d:stalwart
- 220 miranda.org dictd 1.9.15/rf on Linux 2.6.26-bpo.1-686
- <auth.mime> <[email protected]>
- 250 ok
- 150 1 definitions retrieved
- 151 "Stalwart" gcide "The Collaborative International Dictionary of English v.0.48"
- Stalwart \Stal"wart\ (st[o^]l"w[~e]rt or st[add]l"-; 277),
- Stalworth \Stal"worth\ (-w[~e]rth), a. [OE. stalworth, AS.
- staelwyr[eth] serviceable, probably originally, good at
- stealing, or worth stealing or taking, and afterwards
- extended to other causes of estimation. See {Steal}, v. t.,
- {Worth}, a.]
- Brave; bold; strong; redoubted; daring; vehement; violent. "A
- stalwart tiller of the soil." --Prof. Wilson.
- [1913 Webster]
- Fair man he was and wise, stalworth and bold. --R. of
- Brunne.
- [1913 Webster]
- Note: Stalworth is now disused, or but little used, stalwart
- having taken its place.
- [1913 Webster]
- .
- 250 ok [d/m/c = 1/0/20; 0.000r 0.000u 0.000s]
- 221 bye [d/m/c = 0/0/0; 0.000r 0.000u 0.000s]
把單詞 stalwart 替換為您要查找的單詞。
除了通過命令行使用之外,還可以通過 Unix操作系統libcurl 庫使用 cURL 的所有功能。許多編程語言包含 libcurl 的接口,可以自動執行通過 FTP 傳輸文件等任務。例如,下面的 PHP 片段使用 libcurl 把通過表單上傳的文件存放到 FTP 服務器上:
- ...
- $ch = curl_init();
- $localfile = $_FILES['upload']['tmp_name'];
- $fp = fopen($localfile, 'r');
- curl_setopt($ch, CURLOPT_URL,
- 'ftp://ftp_login:[email protected]/'.$_FILES['upload']['name']);
- curl_setopt($ch, CURLOPT_UPLOAD, 1);
- curl_setopt($ch, CURLOPT_INFILE, $fp);
- curl_setopt($ch, CURLOPT_INFILESIZE, filesize($localfile));
- curl_exec ($ch);
- $error_no = curl_errno($ch);
- curl_close ($ch);
- ...
- ?>
如果必須自動執行任何 Web 訪問,可以考慮使用 cURL。大家可以看出Unix操作系統中,使用 cURL 在 Internet 上做各種事情。這給我們帶來了很大的方便。讓我們一起運用 cURL吧。