【網絡】Curl指令

簡介

curl 是一個利用URL語法在命令行方式下工作的文件傳輸工具。它支持很多協議:FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE 以及 LDAP。

指令

1、獲得一張頁面

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

2、表單(Form)的獲取

web頁面中 表單提交數據 GET方法和POST方法。

2.1 GET方法:

對於這種網頁,curl可以直接處理,例如想獲取上面的網頁,只要輸入:
curl “www.hotmail.com/when/junk.cgi?birthyear=1905&press=OK”

2.2 POST方法:

POST方法和GET方法的區別在於GET方法使用的時候,瀏覽器中會產生目標URL,而POST不會。
表單用POST方法向服務器提交數據。這時的URL是看不到的,因此需要使用特殊的方法來抓取這個頁面:
curl -d “birthyear=1905&press=OK” www.hotmail.com/when/junk.cgi

2.3 文件上傳:

用來上傳文件。主要用於把本地文件上傳到服務器。此時頁面是這樣寫的:
curl -F upload=@localfilename -F press=OK URL

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 

參數總結以及實例

curl的命令行工具功能非常強大,這些數據交互的功能基本上都是通過URL方式進行的,我們先來看看curl對多個URL的靈活操作,這些規則使我們的批處理需求應用起來非常方便。

1、用{}表示多個URL

如 http://site.{one,two,three}.com,只要在{}中寫上不同的部分,就可以表示3個URL了。

2、用[]表示多個URL

如 ftp://ftp.numericals.com/file[1-100].txt,ftp://ftp.numericals.com/file[001-100].txt,ftp://ftp.letters.com/file[a-z].txt, []中表示按數字或字母的順序排列。
還能表示不連續的排列,如 http://www.numericals.com/file[1-100:10].txt,http://www.letters.com/file[a-z:2].txt,":" 後面的數字表示等差排列的階躍數。

3、結合起來使用

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

Curl的基本Option

curl命令行工具的基本語句爲:curl [options] [URL…],即 curl [選項] [下載地址]。因此,如果你想下載百度的首頁,最簡單的方法啓動cmd,進入curl安裝目錄,輸入命令:curl http://www.baidu.com,回車,你的輸出窗口將立即出現百度首頁的html數據。對於所有的布爾型option,基本上–option表示支持這個選項,–no-option表示禁用這個選項。下面總結幾個比較有用的 options。

1、-o/–output

這個基本上要算最常用的選項了,用於將下載的數據保存到某個文件中。如 curl -o baidu.html http://www.baidu.com則將百度首頁保存到baidu.html 文件中了。下載過程中標準輸出還會顯示下載的統計信息,比如進度、下載字節數、下載速度等。如果指定輸出爲"-",則下載數據會輸出到標準輸出。
如果輸出的文件是一個多級目錄的話,則要配合--create-dirs選項,--create-dirs將自動創建設置的輸出目錄。
如果希望保存到本地的文件名和服務器上的相同,就可以直接用-O選項(大寫O),而省去指定本地文件名。
如果下載多個數據文件,可以使用上面提到的多URL規則。下載文件名也可以批量自定義,就是使用"#"。可以將"#"加到文件名當中,這樣實際文件名中的#將被多個URL中的當前字符串代替,如 curl http://{site,host}.host[1-5].com -o "#1_#2",#1將被"site"或"host"代替,#2將被1-5之間的數字代替,也就是被當前被處理的URL中的字符串代替。
另外下載數據的時候,可以加個"-#"選項,用一個進度條來代替文本表示進度。

2、-c/–cookie-jar 和 -b/–cookie

這是兩個操作cookie的選項,很多服務器是需要cookie信息的。用前一個選項可以指定一個文件,將其他文件中的cookie或者從服務器得到的 cookie寫到文件中;後一個選項則用來向服務器發送cookie信息,可以用"name=data"的形式,也可以直接跟一個保存cookie的文件名。

3、-x/–proxy

該選項爲http指定代理及端口,如果不指定端口,默認爲1080。如
 curl -x 201.36.208.19:3128 http://curl.haxx.se/。

4、-u/–user 和 -U/–proxy-user

登錄某些頁面或ftp需要先進行認證,輸入用戶名和密碼。curl的這個選項可以直接處理這類操作,用指定的賬號和密碼進行登錄認證。
後面的選項指定代理的用戶名和密碼,這樣便可以直接用這個代理訪問網頁了,如  curl -U user:password -x 201.36.208.19:3128 http://curl.haxx.se/。

5、-A/–user-agent

該選項可以指定客戶端類型,服務器通過該選項判斷用戶應用的平臺及瀏覽器信息。如 curl -A "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)" http://www.clientinfo.com,

表示告訴服務器,客戶端是運行在Windows 2000系統上的IE6.0。

6、-d/–data

該選項用來以POST方式向http服務器發送特定數據,最常用的就是提交表單。如

 curl -d "user=username&password=111" http://www.login.com

表示用賬號username和密碼111向站點發送登錄申請。其中多個數據段可以用”&”進行連接一起發送;如果數據前面加上符號”@”,則數據來源爲後面指定的文件,如 curl -d password=@D:\pw.txthttp://www.login.com。

7、-C/–continue-at

改選項提供斷點續傳功能,與-o選項配合使用。如

curl -c -O http://vfile.home.news.cn/music/public/vd05/200905/31/a8/MUfs052009053117155750a8be70.mp3

如果指定offset,則從offset的位置開始續傳。如果未指定offset,或者直接用”-C -“,則curl會自己分析該從什麼位置開始續傳。

8、-r/–range

該選項指定下載字節的範圍,常應用於分塊下載文件。range的表示方式有多種,如100-500,則指定從100開始的400個字節數據;-500表示最後的500個字節;5000-表示從第5000個字節開始的所有字節;另外還可以同時指定多個字節塊,中間用”,”分開。如

    curl -r 0-1024000 -o new_divide_1.mp3 http://vfile.home.news.cn/music/public/vd05/200905/31/a8/MUfs052009053117155750a8be70.mp3 &
    curl -r 1024001-2048000 -o new_divide_2.mp3 http://vfile.home.news.cn/music/public/vd05/200905/31/a8/MUfs052009053117155750a8be70.mp3 &
    curl -r 2048001- -o new_divide_3.mp3 http://vfile.home.news.cn/music/public/vd05/200905/31/a8/MUfs052009053117155750a8be70.mp3

這樣就會將目標mp3文件分塊下載爲3個文件,然後可以用dos的copy命令:copy new_divide_1.mp3/b + new_divide_2.mp3/b + new_divide_3.mp3/b new_divide.mp3即可將3個分塊文件合併爲一個完整的mp3文件。

9、-w/–write-out

該選項格式化輸出一些用戶操作的數據信息,用到的格式化輸出符除了”\n”,”\r”,”\t”這些常見轉義符外,還包括”@”和”%”。其中”@filename”表示輸出filename文件中的數據,”@-“表示輸出用戶寫入標準輸入的數據;”%”標識符後面跟上定義的關鍵字,則可以輸出對應的curl數據,常用的關鍵字有:
http_code —— 上次操作返回的響應碼;
time_total —— 上次操作耗時,單位爲秒;
time_connect —— TCP連接遠程主機的耗時,單位爲秒;
time_pretransfer —— 文件真正開始傳輸之前交互耗時,單位爲秒,可能主要包括一些命令處理和協議分析的耗時;
time_starttransfer —— 文件的第一個字節開始傳輸之前的耗時,單位爲秒,包括time_pretransfer和服務器計算結果的時間;
size_download —— 下載的總字節數;
size_upload —— 上傳的總字節數;
size_request —— 發送http請求的總字節數;
speed_download —— curl成功下載的平均下載速度;
speed_upload —— curl成功上傳的平均上傳速度;
舉例:

curl -o page.html -s -w %{time_connect}:%{time_starttransfer}:%{time_total} http://curl.haxx.se/

其中-s表示安靜模式,即略去所有狀態信息。

10、–connect-timeout 和 -m/–max-time

前者表示允許的連接的最長耗時,單位爲秒;後者表示允許的整個操作的最長耗時,單位爲秒,這個選項對於控制一個批處理操作的時長非常有用。

11、–limit-rate 、 -Y/–speed-limit 和 -y/–speed-time

–limit-rate 指定最大的數據傳輸率,單位爲bytes/s,也可以用’k’或’K’表示kb/s,’m’或’M’表示mb/s,’g’或 ‘G’表示gb/s,所給的speed爲平均傳輸率,短時間峯值可能會超過此值;
-Y/–speed-limit 指定最小傳輸率,單位爲bytes/s,如果小於speed值,則傳輸中止,如此時-y選項沒有被設置,默認time爲 30;-y/–speed-time

12、–max-filesize

該選項指定所要下載的文件的最大長度,如果超過bytes值,則下載並不開始,curl返回退出碼63。

13、–retry 、 –retry-delay 和 –retry-max-time

當傳輸過程中出現錯誤,如超時、FTP 5xx返回碼或者HTTP 5xx返回碼,curl會進行按照設置進行重試,這幾個選項都與重試有關。–retry 設置重試次數,–retry-delay 設置兩次重試的間隔時間,–retry-max-time 設置兩次重試間隔的最長時間。默認情況下,curl不進行重試;如果重試,第一次間隔1秒,之後每次都間隔上一次的2倍時間,直到間隔時間達到10分鐘,之後的重試都將採用10分鐘間隔。如果這3個選項的值被重新設置,則執行設置值。

14、-T/–upload-file

該選項是上傳命令,如向http服務器上傳一個文件:

curl -T D:\new_divide.mp3 http://www.uploadserver.com/path/

向一個ftp服務器上傳文件:

curl -T D:\new_divide.mp3 -u user:password ftp://upload_site:port/path/
發佈了33 篇原創文章 · 獲贊 45 · 訪問量 20萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章