Linux 命令-curl 常用命令
下載單個文件
cur http://www.demo.com
默認(rèn)將輸出打印到標(biāo)準(zhǔn)輸出中(STDOUT)中
通過-o/-O 選項保存下載的文件到指定的文件中
-
-o
:將文件保存為命令行中指定的文件名的文件中
curl -o test.html http://www.demo.com/index.html
將文件保存到本地并命名為 test.html -
-O
:使用 URL 中默認(rèn)的文件名保存文件到本地
curl -O http://www.demo.com/index.html
將文件下載到本地并命名為 index.html -
curl -O URL1 -O URL2
同時獲取多個文件
若同時從同一站點下載多個文件時舶衬,curl 會嘗試重用鏈接
補(bǔ)充
-
curl http://www.demo.com/index.html > test.html
可以使用 > 符號將輸出重定向到本地文件中 - 有時候下載圖片可以能是前面的部分名稱是一樣的,就最后的尾椎名不一樣
curl -O http://www.linux.com/dodo[1-5].JPG
這樣就會把 dodo1粒竖,dodo2玖院,dodo3腿箩,dodo4浙巫,dodo5 全部保存下來 - 有時候下載的東西會比較大莽鸭,這個時候我們可以分段下載吗伤。使用內(nèi)置 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 的內(nèi)容了
通過-L 選項進(jìn)行重定向
curl -L http://www.baidu.com
有時候我們想要 curl 做的,就是像瀏覽器一樣跟隨鏈接的跳轉(zhuǎn)硫眨,獲取最終的網(wǎng)頁內(nèi)容足淆。我們可以在命令中添加 -L 選項來跟隨鏈接重定向
通過使用-C 選項可對大文件使用斷點續(xù)傳功能
curl -C - -O http://www.demo.com/index.html
通過添加-C 選項繼續(xù)對該文件進(jìn)行下載,已經(jīng)下載過的文件不會被重新下載, 突然掉線了捺球,也可以使用以下的方式續(xù)傳
通過--limit-rate 選項對 CURL 的最大網(wǎng)絡(luò)使用進(jìn)行限制
curl --limit-rate 1000B -O http://www.demo.com/index.html
下載速度最大不會超過 1000B/second
通過使用-z 選項來實現(xiàn)下載指定時間內(nèi)修改過的文件
- 當(dāng)下載一個文件時缸浦,可對該文件的最后修改日期進(jìn)行判斷,如果該文件在指定日期內(nèi)修改過氮兵,就進(jìn)行下載裂逐,否則不下載。
-
curl -z 21-Dec-11 http://www.demo.com/index.html
若 index.html 文件在 2011/12/21 之后有過更新才會進(jìn)行下載
通過-u 選項提供用戶名和密碼進(jìn)行授權(quán)
curl -u username:password URL
-
curl -u username URL
通常的做法是在命令行只輸入用戶名泣栈,之后會提示輸入密碼卜高,這樣可以保證在查看歷史記錄時不會將密碼泄露
從 FTP 服務(wù)器下載文件
- CURL 同樣支持 FTP 下載,若在 url 中指定的是某個文件路徑而非具體的某個要下載的文件名南片,CURL 則會列出該目錄下的所有文件名而并非下載該目錄下的所有文件
-
curl -u ftpuser:ftppass -O ftp://ftp_server/public_html/
列出 public_html 下的所有文件夾和文件 -
curl -u ftpuser:ftppass -O ftp://ftp_server/public_html/xss.php
下載 xss.php 文件
補(bǔ)充
curl -O -u 用戶名:密碼 ftp://www.linux.com/dodo1.JPG
curl -O ftp://用戶名:密碼@www.linux.com/dodo1.JPG
- 顯示下載進(jìn)度條
curl -# -O http://www.linux.com/dodo1.JPG
- 不會顯示下載進(jìn)度信息
curl -s -O http://www.linux.com/dodo1.JPG
通過 -T 選項可將指定的本地文件上傳到 FTP 服務(wù)器上
-
curl -u ftpuser:ftppass -T myfile.txt ftp://ftp.testserver.com
將 myfile.txt 文件上傳到服務(wù)器 -
curl -u ftpuser:ftppass -T "{file1,file2}" ftp://ftp.testserver.com
同時上傳多個文件 -
curl -u ftpuser:ftppass -T - ftp://ftp.testserver.com/myfile_1.txt
從標(biāo)準(zhǔn)輸入獲取內(nèi)容保存到服務(wù)器指定的文件中
通過使用 -v 和 -trace 獲取更多的鏈接信息
-x 選項可以為 CURL 添加代理功能
curl -x proxysever.test.com:3128 http://google.co.in
指定代理主機(jī)和端口
指定 proxy 服務(wù)器以及其端口
補(bǔ)充
很多時候上網(wǎng)需要用到代理服務(wù)器(比如是使用代理服務(wù)器上網(wǎng)或者因為使用 curl 別人網(wǎng)站而被別人屏蔽 IP 地址的時候)掺涛,幸運的是 curl 通過使用內(nèi)置 option:-x 來支持設(shè)置代理
curl -x 192.168.100.100:1080 http://www.linux.com
保存與使用網(wǎng)站 cookie 信息
-
curl -D sugarcookies http://localhost/sugarcrm/index.php
將網(wǎng)站的 cookies 信息保存到 sugarcookies 文件中 -
curl -b sugarcookies http://localhost/sugarcrm/index.php
使用上次保存的 cookie 信息
補(bǔ)充
- 使用 -c 保存 Cookie
curl -c "cookie-example" http://www.example.com
- 使用 -b 讀取 Cookie,-b 后面既可以是 Cookie 字符串疼进,也可以是保存了 Cookie 的文件名
curl -b "JSESSIONID=D0112A5063D938586B659EF8F939BE24" http://www.example.com
curl -b "cookie-example" http://www.example.com
- 保存 http 的 response 里面的 header 信息薪缆。內(nèi)置 option: -D
傳遞請求數(shù)據(jù)
默認(rèn) curl 使用 GET 方式請求數(shù)據(jù),這種方式下直接通過 URL 傳遞數(shù)據(jù),可以通過 --data/-d 方式指定使用 POST 方式傳遞數(shù)據(jù)
-
curl -u username https://api.github.com/user?access_token=XXXXXXXXXX
GET 請求 -
curl -u username --data "param1=value1¶m2=value" https://api.github.com
POST 請求 -
curl --data @filename https://github.api.com/authorizations
也可以指定一個文件伞广,將該文件中的內(nèi)容當(dāng)作數(shù)據(jù)傳遞給服務(wù)器端 - 默認(rèn)情況下拣帽,通過 POST 方式傳遞過去的數(shù)據(jù)中若有特殊字符,首先需要將特殊字符轉(zhuǎn)義在傳遞給服務(wù)器端嚼锄,如 value 值中包含有空格减拭,則需要先將空格轉(zhuǎn)換成%20,如:
curl -d "value%201" http://hostname.com
- 在新版本的 CURL 中区丑,提供了新的選項 --data-urlencode拧粪,通過該選項提供的參數(shù)會自動轉(zhuǎn)義特殊字符。
curl --data-urlencode "value 1" http://hostname.com
- 除了使用 GET 和 POST 協(xié)議外沧侥,還可以通過 -X 選項指定其它協(xié)議可霎,如:
curl -I -X DELETE https://api.github.cim
- 上傳文件
curl --form "fileupload=@filename.txt" http://hostname/resource
補(bǔ)充
- 使用 -G 選項可指定 GET 方式
- 帶 Cookie 登錄
curl -c "cookie-login" -d "userName=tom&passwd=123456" http://www.example.com/login
再次訪問該網(wǎng)站時,使用以下命令:
curl -b "cookie-login" http://www.example.com/login
這樣宴杀,就能保持訪問的是登錄后的頁面了啥纸。
可以使用 -I 選項顯示 HTTP 頭,而不顯示文件內(nèi)容婴氮,也可以使用 -i 選項同時顯示 HTTP 頭和文件內(nèi)容
curl -I http://www.codebelief.com
curl -i http://www.codebelief.com
使用 -A 自定義 User-Agent
可以使用 -A 來自定義用戶代理斯棒,例如下面的命令將偽裝成安卓火狐瀏覽器對網(wǎng)頁進(jìn)行請求:
curl -A "Mozilla/5.0 (Android; Mobile; rv:35.0) Gecko/35.0 Firefox/35.0" http://www.baidu.com
使用 -H 自定義 header
當(dāng)我們需要傳遞特定的 header 的時候盾致,可以仿照以下命令來寫:
curl -H "Referer: www.example.com" -H "User-Agent: Custom-User-Agent" http://www.baidu.com
可以看到,當(dāng)我們使用 -H 來自定義 User-Agent 時荣暮,需要使用 "User-Agent: xxx" 的格式庭惜。
我們能夠直接在 header 中傳遞 Cookie,格式與上面的例子一樣:
curl -H "Cookie: JSESSIONID=D0112A5063D938586B659EF8F939BE24" http://www.example.com
偽造 referer(盜鏈)
很多服務(wù)器會檢查 http 訪問的 referer 從而來控制訪問穗酥。比如:你是先訪問首頁护赊,然后再訪問首頁中的郵箱頁面,這里訪問郵箱的 referer 地址就是訪問首頁成功后的頁面地址砾跃,如果服務(wù)器發(fā)現(xiàn)對郵箱頁面訪問的 referer 地址不是首頁的地址骏啰,就斷定那是個盜連了
curl 中內(nèi)置 option:-e 可以讓我們設(shè)定 referer
curl -e "www.linux.com" http://mail.linux.com
這樣就會讓服務(wù)器其以為你是從 www.linux.com 點擊某個鏈接過來的