天天看點

Curl 用法

curl是一個利用URL文法在指令行方式下工作的檔案傳輸工具。本文介紹了它的簡單用法。

curl是一個利用URL文法在指令行方式下工作的檔案傳輸工具。它支援很多協定:FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE 以及 LDAP。curl同樣支援HTTPS認證,HTTP POST方法, HTTP PUT方法, FTP上傳, kerberos認證, HTTP上傳, 代理伺服器, cookies, 使用者名/密碼認證, 下載下傳檔案斷點續傳, 上載檔案斷點續傳, http代理伺服器管道( proxy tunneling), 甚至它還支援IPv6, socks5代理伺服器, 通過http代理伺服器上傳檔案到FTP伺服器等等,功能十分強大。Windows作業系統下的網絡螞蟻,網際快車(FlashGet)的功能它都可以做 到。準确的說,curl支援檔案的上傳和下載下傳,是以是一個綜合傳輸工具,但是按照傳統,使用者習慣稱curl為下載下傳工具。

curl是瑞典curl組織開發的,您可以通路http://curl.haxx.se/擷取它的源代碼和相關說明。鑒于curl在Linux上的 廣泛使用,IBM在AIX Linux Toolbox的CD光牒中包含了這個軟體,并且您可以通路IBM網站http://www- 1.ibm.com/servers/aix/products/aixos/linux/altlic.html下載下傳它。curl的最新版本是 7.10.8,IBM網站上提供的版本為7.9.3。在AIX下的安裝很簡單,IBM網站上下載下傳的rpm格式的包。

在http://curl.haxx.se/docs/,您可以下載下傳到UNIX格式的man幫助,裡面有詳細的curl工具的使用說明。curl的 用法為:curl [options] [URL...] 其中options是下載下傳需要的參數,大約有80多個,curl的各個功能完全是依靠這些參數完成的。具體參數的使用,使用者可以參考curl的man幫 助。

下面,本文就将結合具體的例子來說明怎樣利用curl進行下載下傳。

1、獲得一張頁面

使用指令:curl http://curl.haxx.se

這是最簡單的使用方法。用這個指令獲得了http://curl.haxx.se指向的頁面,同樣,如果這裡的URL指向的是一個檔案或者一幅圖都 可以直接下載下傳到本地。如果下載下傳的是HTML文檔,那麼預設的将不顯示檔案頭部,即HTML文檔的header。要全部顯示,請加參數 -i,要隻顯示頭部,用參數 -I。任何時候,可以使用 -v 指令看curl是怎樣工作的,它向伺服器發送的所有指令都會顯示出來。為了斷點續傳,可以使用-r參數來指定傳輸範圍。

2、表單(Form)的擷取

在WEB頁面設計中,form是很重要的元素。Form通常用來收集并向網站送出資訊。送出資訊的方法有兩種,GET方法和POST方法。先讨論GET方法,例如在頁面中有這樣一段:

那麼浏覽器上會出現一個文本框和一個标為“OK”的按鈕。按下這個按鈕,表單就用GET方法向伺服器送出文本框的資料。例如原始頁面是在 www.hotmail.com/when/birth.html看到的,然後您在文本框中輸入1905,然後按OK按鈕,那麼浏覽器的URL現在應該 是:“www.hotmail.com/when/junk.cgi?birthyear=1905&press=OK”

對于這種網頁,curl可以直接處理,例如想擷取上面的網頁,隻要輸入:

curl “www.hotmail.com/when/junk.cgi?birthyear=1905&press=OK”

就可以了。

表單用來送出資訊的第二種方法叫做POST方法,POST方法和GET方法的差別在于GET方法使用的時候,浏覽器中會産生目标URL,而POST不會。類似GET,這裡有一個網頁:

浏覽器上也會出現一個文本框和一個标為“OK”的按鈕。按下這個按鈕,表單用POST方法向伺服器送出資料。這時的URL是看不到的,是以需要使用特殊的方法來抓取這個頁面:

curl -d “birthyear=1905&press=OK” www.hotmail.com/when/junk.cgi

這個指令就可以做到。

1995年年末,RFC 1867定義了一種新的POST方法,用來上傳檔案。主要用于把本地檔案上傳到伺服器。此時頁面是這樣寫的:

對于這種頁面,curl的用法不同:

curl -F upload=@localfilename -F press=OK URL

這個指令的實質是将本地的檔案用POST上傳到伺服器。有關POST還有不少用法,使用者可以自己摸索。

3、使用PUT方法。

HTTP協定檔案上傳的标準方法是使用PUT,此時curl指令使用-T參數:

curl -T uploadfile www.uploadhttp.com/receive.cgi

4、有關認證。

curl可以處理各種情況的認證頁面,例如下載下傳使用者名/密碼認證方式的頁面(在IE中通常是出現一個輸入使用者名和密碼的輸入框):

curl -u name:password www.secrets.com

如果網絡是通過http代理伺服器出去的,而代理伺服器需要使用者名和密碼,那麼輸入:

curl -U proxyuser:proxypassword http://curl.haxx.se

任何需要輸入使用者名和密碼的時候,隻在參數中指定使用者名而空着密碼,curl可以互動式的讓使用者輸入密碼。

5、引用。

有些網絡資源通路的時候必須經過另外一個網絡位址跳轉過去,這用術語來說是:referer,引用。對于這種位址的資源,curl也可以下載下傳:

curl -e http://curl.haxx.se daniel.haxx.se

6、指定使用者用戶端。

有些網絡資源首先需要判斷使用者使用的是什麼浏覽器,符合标準了才能夠下載下傳或者浏覽。此時curl可以把自己“僞裝”成任何其他浏覽器:

curl -A “Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)” URL

這個指令表示curl僞裝成了IE5.0,使用者平台是Windows 2000。(對方伺服器是根據這個字串來判斷用戶端的類型的,是以即使使用AIX也無所謂)。使用:

curl -A “Mozilla/4.73 [en] (X11; U; Linux 2.2.15 i686)” URL

此時curl變成了Netscape,運作在PIII平台的Linux上了。

7、COOKIES

Cookie是伺服器經常使用的一種記憶客戶資訊的方法。如果cookie被記錄在了檔案中,那麼使用指令:

curl -b stored_cookies_in_file www.cookiesite.com

curl可以根據舊的cookie寫出新cookie并發送到網站:

curl -b cookies.txt -c newcookies.txt www.cookiesite.com

8、加密的HTTP——HTTPS。

如果是通過OpenSSL加密的https協定傳輸的網頁,curl可以直接通路:

curl https://that.secure.server.com

9、http認證。

如果是采用證書認證的http位址,證書在本地,那麼curl這樣使用:

curl -E mycert.pem https://that.secure.server.com

參考讀物和注意事項:curl非常博大,使用者要想使用好這個工具,除了詳細學習參數之外,還需要深刻了解http的各種協定與URL的各個文法。這裡推薦幾個讀物:

RFC 2616 HTTP協定文法的定義。

RFC 2396 URL文法的定義。

RFC 2109 Cookie是怎樣工作的。

RFC 1867 HTTP如何POST,以及POST的格式。

curl是免費軟體,IBM公司對curl不提供技術支援。

繼續閱讀