curl

curl

cURL是一個利用URL語法在命令行下工作的檔案傳輸工具,1997年首次發行。它支持檔案上傳和下載,所以是綜合傳輸工具,但按傳統,習慣稱cURL為下載工具。cURL還包含了用於程式開發的libcurl。

基本介紹

  • 中文名:curl
  • 外文名:curl(CommandLine Uniform Resource Locator)
  • 類別:用URL語法
  • 作用檔案傳輸
  • 適用範圍:計算機
簡介,設計方法,獲得頁面,獲取表單,使用PUT,有關認證,引用,指定用戶端,COOKIES,加密HTTP,http認證,相關函式,PHP cURL 函式,

簡介

cURL是一個利用URL語法在命令行下工作的檔案傳輸工具,1997年首次發行。它支持檔案上傳和下載,所以是綜合傳輸工具,但按傳統,習慣稱cURL為下載工具。cURL還包含了用於程式開發的libcurl。
cURL支持的通信協定有FTPFTPSHTTPHTTPSTFTPSFTPGopherSCPTelnet、DICT、FILELDAP、LDAPS、IMAPPOP3SMTPRTSP
curl還支持SSL認證、HTTP POST、HTTP PUT、FTP上傳, HTTP form based upload、proxies、HTTP/2、cookies、用戶名+密碼認證(Basic, Plain, Digest, CRAM-MD5, NTLM, Negotiate and Kerberos)、file transfer resume、proxy tunneling。

設計方法

獲得頁面

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

獲取表單

在WEB頁面設計中,form是很重要的元素。Form通常用來收集並向網站提交信息。提交信息的方法有兩種,GET方法和POST方法。先討論GET方法,例如在頁面中有這樣一段:
<form method="GET" action="junk.cgi"><input type=text name="birthyear"><input type=submit name=press value="OK"></form>
那么瀏覽器上會出現一個文本框和一個標為“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,這裡有一個網頁:
<form method="POST" action="junk.cgi"><input type=text name="birthyear"><input type=submit name=press value="OK"></form>
瀏覽器上也會出現一個文本框和一個標為“OK”的按鈕。按下這個按鈕,表單用POST方法向伺服器提交數據。
這時的URL是看不到的,因此需要使用特殊的方法來抓取這個頁面:
curl -d "birthyear=1905&press=OK" www.hotmail. com/when/junk.cgi
這個命令就可以做到。
1995年年末,RFC 1867定義了一種新的POST方法,用來上傳檔案。主要用於把本地檔案上傳到伺服器。此時頁面是這樣寫的:
<form method="POST" enctype='multipart/form-data' action="upload.cgi"><input type=file name=upload><input type=submit name=press value="OK"></form>
對於這種頁面,curl的用法不同:
curl -F upload=@localfilename -F press=OK URL
這個命令的實質是將本地的檔案用POST上傳到伺服器。
有關POST還有不少用法,用戶可以自己摸索。

使用PUT

HTTP協定檔案上傳的標準方法是使用PUT,此時curl命令使用-T參數:
curl -T uploadfile www.uploadhttp. com/receive.cgi

有關認證

curl可以處理各種情況的認證頁面,例如下載用戶名/密碼認證方式的頁面(在IE中通常是出現一個輸入用戶名和密碼的輸入框):
curl -u name:password www.secrets. com
如果網路是通過http代理伺服器出去的,而代理伺服器需要用戶名和密碼,那么輸入:
curl -U proxyuser:proxypassword http://curl.haxx. se
任何需要輸入用戶名和密碼的時候,只在參數中指定用戶名而空著密碼,curl可以互動式的讓用戶輸入密碼。

引用

有些網路資源訪問的時候必須經過另外一個網路地址跳轉過去,這用術語來說是:referer,引用。
對於這種地址的資源,curl也可以下載:
curl -e http://curl.haxx. se daniel.haxx. se

指定用戶端

有些網路資源首先需要判斷用戶使用的是什麼瀏覽器,符合標準了才能夠下載或者瀏覽。此時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上了。

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

加密HTTP

如果是通過OpenSSL加密的https協定傳輸的網頁,curl可以直接訪問:
curl https://that.secure.server. com

http認證

如果是採用證書認證的http地址,證書在本地,那么curl這樣使用:
curl -E mycert.pem https://that.secure.server. com

相關函式

PHP cURL 函式

PHP支持的由Daniel Stenberg創建的libcurl庫允許你與各種的伺服器使用各種類型的協定進行連線和通訊。libcurl支持httphttpsftpgophertelnet、dict、fileldap協定。libcurl同時也支持HTTPS認證、HTTP POST、HTTP PUT、 FTP 上傳(這個也能通過PHP的FTP擴展完成)、HTTP 基於表單的上傳、代理、cookies和用戶名+密碼的認證。
PHP中使用cURL實現Get和Post請求的方法這些函式在PHP 4.0.2中被引入。以下包含了PHP cURL函式列表:
curl_close()
關閉一個cURL會話。
curl_copy_handle()
複製一個cURL句柄和它的所有選項。
curl_errno()
返回最後一次的錯誤號。
curl_error()
返回一個保護當前會話最近一次錯誤的字元串。
curl_escape()
返迴轉義字元串,對給定的字元串進行URL編碼。
curl_exec()
執行一個cURL會話。
curl_file_create()
創建一個CURLFile對象。
curl_getinfo()
獲取一個cURL連線資源句柄的信息。
curl_init()
初始化一個cURL會話。
curl_multi_add_handle()
向curl批處理會話中添加單獨的curl句柄。
curl_multi_close()
關閉一組cURL句柄。
curl_multi_exec()
運行當前cURL句柄的子連線
curl_multi_getcontent()
如果設定了CURLOPT_RETURNTRANSFER,
則返回獲取的輸出的文本流。
curl_multi_info_read()
獲取當前解析的cURL的相關傳輸信息。
curl_multi_init()
返回一個新cURL批處理句柄。
curl_multi_remove_handle()
移除curl批處理句柄資源中的某個句柄資源。
curl_multi_select()
等待所有cURL批處理中的活動連線。
curl_multi_setopt()
設定一個批處理cURL傳輸選項。
curl_multi_strerror()
返回描述錯誤碼的字元串文本。
curl_pause()
暫停及恢復連線。
curl_reset()
重置libcurl的會話句柄的所有選項。
curl_setopt_array()
為cURL傳輸會話批量設定選項。
curl_setopt()
設定一個cURL傳輸選項。
curl_share_close()
關閉cURL共享句柄。
curl_share_init()
初始化cURL共享句柄。
curl_share_setopt()
設定一個共享句柄的cURL傳輸選項。
curl_strerror()
返回錯誤代碼的字元串描述。
curl_unescape()
解碼URL編碼後的字元串。
curl_version()
獲取cURL版本信息。

相關詞條

熱門詞條

聯絡我們