天天看點

curl

指令:curl

在Linux中curl是一個利用URL規則在指令行下工作的檔案傳輸工具,可以說是一款很強大的http指令行工具。它支援檔案的上傳和下載下傳,是綜合傳輸工具,但按傳統,習慣稱url為下載下傳工具。

文法:# curl [option] [url]

常見參數:

-A/--user-agent <string>              設定使用者代理發送給伺服器

-b/--cookie <name=string/file>    cookie字元串或檔案讀取位置

-c/--cookie-jar <file>                    操作結束後把cookie寫入到這個檔案中

-C/--continue-at <offset>            斷點續轉

-D/--dump-header <file>              把header資訊寫入到該檔案中

-e/--referer                                  來源網址

-f/--fail                                          連接配接失敗時不顯示http錯誤

-o/--output                                  把輸出寫到該檔案中

-O/--remote-name                      把輸出寫到該檔案中,保留遠端檔案的檔案名

-r/--range <range>                      檢索來自HTTP/1.1或FTP伺服器位元組範圍

-s/--silent                                    靜音模式。不輸出任何東西

-T/--upload-file <file>                  上傳檔案

-u/--user <user[:password]>      設定伺服器的使用者和密碼

-w/--write-out [format]                什麼輸出完成後

-x/--proxy <host[:port]>              在給定的端口上使用HTTP代理

-#/--progress-bar                        進度條顯示目前的傳送狀态

例子:

1、基本用法

# curl http://www.linux.com

執行後,www.linux.com 的html就會顯示在螢幕上了

Ps:由于安裝linux的時候很多時候是沒有安裝桌面的,也意味着沒有浏覽器,是以這個方法也經常用于測試一台伺服器是否可以到達一個網站

2、儲存通路的網頁

2.1:使用linux的重定向功能儲存

# curl http://www.linux.com >> linux.html

2.2:可以使用curl的内置option:-o(小寫)儲存網頁

$ curl -o linux.html http://www.linux.com

執行完成後會顯示如下界面,顯示100%則表示儲存成功

% Total    % Received % Xferd  Average Speed  Time    Time    Time  Current

                                Dload  Upload  Total  Spent    Left  Speed

100 79684    0 79684    0    0  3437k      0 --:--:-- --:--:-- --:--:-- 7781k

2.3:可以使用curl的内置option:-O(大寫)儲存網頁中的檔案

要注意這裡後面的url要具體到某個檔案,不然抓不下來

# curl -O http://www.linux.com/hello.sh

3、測試網頁傳回值

# curl -o /dev/null -s -w %{http_code} www.linux.com

Ps:在腳本中,這是很常見的測試網站是否正常的用法

4、指定proxy伺服器以及其端口

很多時候上網需要用到代理伺服器(比如是使用代理伺服器上網或者因為使用curl别人網站而被别人屏蔽IP位址的時候),幸運的是curl通過使用内置option:-x來支援設定代理

# curl -x 192.168.100.100:1080 http://www.linux.com

5、cookie

有些網站是使用cookie來記錄session資訊。對于chrome這樣的浏覽器,可以輕易處理cookie資訊,但在curl中隻要增加相關參數也是可以很容易的處理cookie

5.1:儲存http的response裡面的cookie資訊。内置option:-c(小寫)

# curl -c cookiec.txt  http://www.linux.com

執行後cookie資訊就被存到了cookiec.txt裡面了

5.2:儲存http的response裡面的header資訊。内置option: -D

# curl -D cookied.txt http://www.linux.com

執行後cookie資訊就被存到了cookied.txt裡面了

注意:-c(小寫)産生的cookie和-D裡面的cookie是不一樣的。

5.3:使用cookie

很多網站都是通過監視你的cookie資訊來判斷你是否按規矩通路他們的網站的,是以我們需要使用儲存的cookie資訊。内置option: -b

# curl -b cookiec.txt http://www.linux.com

6、模仿浏覽器

有些網站需要使用特定的浏覽器去通路他們,有些還需要使用某些特定的版本。curl内置option:-A可以讓我們指定浏覽器去通路網站

# curl -A "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.0)" http://www.linux.com

這樣伺服器端就會認為是使用IE8.0去通路的

7、僞造referer(盜鍊)

很多伺服器會檢查http通路的referer進而來控制通路。比如:你是先通路首頁,然後再通路首頁中的郵箱頁面,這裡通路郵箱的referer位址就是通路首頁成功後的頁面位址,如果伺服器發現對郵箱頁面通路的referer位址不是首頁的位址,就斷定那是個盜連了

curl中内置option:-e可以讓我們設定referer

# curl -e "www.linux.com" http://mail.linux.com

這樣就會讓伺服器其以為你是從www.linux.com點選某個連結過來的

8、下載下傳檔案

8.1:利用curl下載下傳檔案。

#使用内置option:-o(小寫)

# curl -o dodo1.jpg http:www.linux.com/dodo1.JPG

#使用内置option:-O(大寫)

# curl -O http://www.linux.com/dodo1.JPG

這樣就會以伺服器上的名稱儲存檔案到本地

8.2:循環下載下傳

有時候下載下傳圖檔可以能是前面的部分名稱是一樣的,就最後的尾椎名不一樣

# curl -O http://www.linux.com/dodo[1-5].JPG

這樣就會把dodo1,dodo2,dodo3,dodo4,dodo5全部儲存下來

8.3:下載下傳重命名

# curl -O http://www.linux.com/{hello,bb}/dodo[1-5].JPG

由于下載下傳的hello與bb中的檔案名都是dodo1,dodo2,dodo3,dodo4,dodo5。是以第二次下載下傳的會把第一次下載下傳的覆寫,這樣就需要對檔案進行重命名。

# curl -o #1_#2.JPG http://www.linux.com/{hello,bb}/dodo[1-5].JPG

這樣在hello/dodo1.JPG的檔案下載下傳下來就會變成hello_dodo1.JPG,其他檔案依此類推,進而有效的避免了檔案被覆寫

8.4:分塊下載下傳

有時候下載下傳的東西會比較大,這個時候我們可以分段下載下傳。使用内置option:-r

# curl -r 0-100 -o dodo1_part1.JPG http://www.linux.com/dodo1.JPG

# curl -r 100-200 -o dodo1_part2.JPG http://www.linux.com/dodo1.JPG

# curl -r 200- -o dodo1_part3.JPG http://www.linux.com/dodo1.JPG

# cat dodo1_part* > dodo1.JPG

這樣就可以檢視dodo1.JPG的内容了

8.5:通過ftp下載下傳檔案

curl可以通過ftp下載下傳檔案,curl提供兩種從ftp中下載下傳的文法

# curl -O -u 使用者名:密碼 ftp://www.linux.com/dodo1.JPG

# curl -O ftp://使用者名:密碼@www.linux.com/dodo1.JPG

8.6:顯示下載下傳進度條

# curl -# -O http://www.linux.com/dodo1.JPG

8.7:不會顯示下載下傳進度資訊

# curl -s -O http://www.linux.com/dodo1.JPG

9、斷點續傳

在windows中,我們可以使用迅雷這樣的軟體進行斷點續傳。curl可以通過内置option:-C同樣可以達到相同的效果

如果在下載下傳dodo1.JPG的過程中突然掉線了,可以使用以下的方式續傳

# curl -C -O http://www.linux.com/dodo1.JPG

10、上傳檔案

curl不僅僅可以下載下傳檔案,還可以上傳檔案。通過内置option:-T來實作

# curl -T dodo1.JPG -u 使用者名:密碼 ftp://www.linux.com/img/

這樣就向ftp伺服器上傳了檔案dodo1.JPG

11、顯示抓取錯誤

# curl -f http://www.linux.com/error

其他參數(此處翻譯為轉載):

-a/--append                        上傳檔案時,附加到目标檔案

--anyauth                            可以使用“任何”身份驗證方法

--basic                                使用HTTP基本驗證

-B/--use-ascii                      使用ASCII文本傳輸

-d/--data <data>                  HTTP POST方式傳送資料

--data-ascii <data>            以ascii的方式post資料

--data-binary <data>          以二進制的方式post資料

--negotiate                          使用HTTP身份驗證

--digest                        使用數字身份驗證

--disable-eprt                  禁止使用EPRT或LPRT

--disable-epsv                  禁止使用EPSV

--egd-file <file>              為随機資料(SSL)設定EGD socket路徑

--tcp-nodelay                  使用TCP_NODELAY選項

-E/--cert <cert[:passwd]>      用戶端證書檔案和密碼 (SSL)

--cert-type <type>              證書檔案類型 (DER/PEM/ENG) (SSL)

--key <key>                    私鑰檔案名 (SSL)

--key-type <type>              私鑰檔案類型 (DER/PEM/ENG) (SSL)

--pass  <pass>                  私鑰密碼 (SSL)

--engine <eng>                  加密引擎使用 (SSL). "--engine list" for list

--cacert <file>                CA憑證 (SSL)

--capath <directory>            CA目   (made using c_rehash) to verify peer against (SSL)

--ciphers <list>                SSL密碼

--compressed                    要求傳回是壓縮的形勢 (using deflate or gzip)

--connect-timeout <seconds>    設定最大請求時間

--create-dirs                  建立本地目錄的目錄層次結構

--crlf                          上傳是把LF轉變成CRLF

--ftp-create-dirs              如果遠端目錄不存在,建立遠端目錄

--ftp-method [multicwd/nocwd/singlecwd]    控制CWD的使用

--ftp-pasv                      使用 PASV/EPSV 代替端口

--ftp-skip-pasv-ip              使用PASV的時候,忽略該IP位址

--ftp-ssl                      嘗試用 SSL/TLS 來進行ftp資料傳輸

--ftp-ssl-reqd                  要求用 SSL/TLS 來進行ftp資料傳輸

-F/--form <name=content>        模拟http表單送出資料

-form-string <name=string>      模拟http表單送出資料

-g/--globoff                    禁用網址序列和範圍使用{}和[]

-G/--get                        以get的方式來發送資料

-h/--help                      幫助

-H/--header <line>              自定義頭資訊傳遞給伺服器

--ignore-content-length        忽略的HTTP頭資訊的長度

-i/--include                    輸出時包括protocol頭資訊

-I/--head                      隻顯示文檔資訊

-j/--junk-session-cookies      讀取檔案時忽略session cookie

--interface <interface>        使用指定網絡接口/位址

--krb4 <level>                  使用指定安全級别的krb4

-k/--insecure                  允許不使用證書到SSL站點

-K/--config                    指定的配置檔案讀取

-l/--list-only                  列出ftp目錄下的檔案名稱

--limit-rate <rate>            設定傳輸速度

--local-port<NUM>              強制使用本地端口号

-m/--max-time <seconds>        設定最大傳輸時間

--max-redirs <num>              設定最大讀取的目錄數

--max-filesize <bytes>          設定最大下載下傳的檔案總量

-M/--manual                    顯示全手動

-n/--netrc                      從netrc檔案中讀取使用者名和密碼

--netrc-optional                使用 .netrc 或者 URL來覆寫-n

--ntlm                          使用 HTTP NTLM 身份驗證

-N/--no-buffer                  禁用緩沖輸出

-p/--proxytunnel                使用HTTP代理

--proxy-anyauth                選擇任一代理身份驗證方法

--proxy-basic                  在代理上使用基本身份驗證

--proxy-digest                  在代理上使用數字身份驗證

--proxy-ntlm                    在代理上使用ntlm身份驗證

-P/--ftp-port <address>        使用端口位址,而不是使用PASV

-Q/--quote <cmd>                檔案傳輸前,發送指令到伺服器

--range-file                    讀取(SSL)的随機檔案

-R/--remote-time                在本地生成檔案時,保留遠端檔案時間

--retry <num>                  傳輸出現問題時,重試的次數

--retry-delay <seconds>        傳輸出現問題時,設定重試間隔時間

--retry-max-time <seconds>      傳輸出現問題時,設定最大重試時間

-S/--show-error                顯示錯誤

--socks4 <host[:port]>          用socks4代理給定主機和端口

--socks5 <host[:port]>          用socks5代理給定主機和端口

-t/--telnet-option <OPT=val>    Telnet選項設定

--trace <file>                  對指定檔案進行debug

--trace-ascii <file>            Like --跟蹤但沒有hex輸出

--trace-time                    跟蹤/詳細輸出時,添加時間戳

--url <URL>                    Spet URL to work with

-U/--proxy-user <user[:password]>  設定代理使用者名和密碼

-V/--version                    顯示版本資訊

-X/--request <command>          指定什麼指令

-y/--speed-time                放棄限速所要的時間。預設為30

-Y/--speed-limit                停止傳輸速度的限制,速度時間'秒

-z/--time-cond                  傳送時間設定

-0/--http1.0                    使用HTTP 1.0

-1/--tlsv1                      使用TLSv1(SSL)

-2/--sslv2                      使用SSLv2的(SSL)

-3/--sslv3                      使用的SSLv3(SSL)

--3p-quote                      like -Q for the source URL for 3rd party transfer

--3p-url                        使用url,進行第三方傳送

--3p-user                      使用使用者名和密碼,進行第三方傳送

-4/--ipv4                      使用IP4

-6/--ipv6                      使用IP6

繼續閱讀