最近特別對Shell這塊感興趣,總想用腳本去寫點什么。上次為項目寫了一個打包腳本,費了九牛二虎之力,但是感覺還不錯,很有成就感,而且還被領導表揚了。上周四填寫工時的時候,發現每次手動去寫一些重復的事情的時候很麻煩,于是就想通過腳本批量化處理,就想到了Bash中的一個強大命令Curl。下面為大家介紹一些Curl的強大之處,同時也當做一個記錄學習的過程,當不久之后,自己可能會遺忘自己學習過的東西,但是可以通過自己寫的文字快速回憶起那時學過的東西,感覺很有用。
英文版資料:https://curl.haxx.se/docs/httpscripting.html
1.訪問一個網址。
curl http://www.baidu.com
這個是最簡單的,他會把你訪問的地址已文字的方式返回。比如下邊直接返回的json的字符串
2.保存頁面&&下載文件
curl option : -o
curl -o baidu.html http://www.baidu.com
下載一張圖片
curl -o girl.jpg http://hostname.com/girl.jpg
如果想下載圖片的名字和服務器保持一致 -O 大寫的O
curl -O http://hostname.com/girl.jpg
可以看到屏幕上出現一個下載頁面進度指示,等到100%,就保存完成了.
3.GET訪問一個接口。其實和第一個類似,應為第一個就是一個get方式,只不過沒有參數罷了。如果帶有參數的接口應該這樣寫:
curl http://www.xxxx.com/getDataList?param1=value1¶m2=value2
4.POST
使用 option -d/--data,
curl -d "param2=nickwolfe¶m2=12345" http://www.xxx.com/xxx
也可以指定一個文件,將該文件中的內容當作數據傳遞給服務器端
curl --data @filename https://hostname.com/xxx
注:默認情況下,通過POST方式傳遞過去的數據中若有特殊字符,首先需要將特殊字符轉義在傳遞給服務器端,如value值中包含有空格,則需要先將空格轉換成%20,如:
curl -d "value%201" http://hostname.com
在新版本的CURL中,提供了新的選項 --data-urlencode,通過該選項提供的參數會自動轉義特殊字符。
curl --data-urlencode "value 1" http://hostname.com
除了使用GET和POST協議外,還可以通過 -X 選項指定其它協議,如:
curl -I -X DELETE https://api.github.cim
5.使用curl的時候,用option可以指定http訪問所使用的proxy服務器及其端口: -x
curl -x 193.168.1.1:8080 http://www.baidu.com
6.保存與使用網站cookie信息
將網站的cookies信息保存到sugarcookies文件中
curl -D cookies.txt http://localhost/sugarcrm/index.php
使用上次保存的cookie信息
curl -b cookies.txt http://localhost/sugarcrm/index.php
7.CURL授權
在訪問需要授權的頁面時,可通過-u選項提供用戶名和密碼進行授權
curl -u username:password URL
通常的做法是在命令行只輸入用戶名,之后會提示輸入密碼,這樣可以保證在查看歷史記錄時不會將密碼泄露
curl -u username URL
8.顯示通信過程
-v
參數可以顯示一次http通信的整個過程,包括端口連接和http請求頭信息。
curl -v www.sina.com