自學shell之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
執行後,http://www.linux.com 的html就會顯示在屏幕上了
Ps:由於安裝linux的時候很多時候是沒有安裝桌面的,也意味著沒有瀏覽器,因此這個方法也經常用於測試一台伺服器是否可以到達一個網站
2、保存訪問的網頁
可以使用curl的內置option:-o(小寫)保存網頁
$ curl -o linux.html http://www.linux.com
可以使用curl的內置option:-O(大寫)保存網頁中的文件
要注意這裡後面的url要具體到某個文件,不然抓不下來# curl -O http://www.linux.com/hello.sh
3、測試網頁返回值
# curl -o /dev/null -s -w %{http_code} www.linux.com
4、cookie
有些網站是使用cookie來記錄session信息。對於chrome這樣的瀏覽器,可以輕易處理cookie信息,但在curl中只要增加相關參數也是可以很容易的處理cookie4.1:保存http的response裡面的cookie信息。內置option:-c(小寫)
# curl -c cookiec.txt http://www.linux.com
執行後cookie信息就被存到了cookiec.txt裡面了
4.2:保存http的response裡面的header信息。內置option: -D
# curl -D cookied.txt http://www.linux.com
執行後cookie信息就被存到了cookied.txt裡面了
注意:-c(小寫)產生的cookie和-D裡面的cookie是不一樣的。
4.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
這樣就會讓伺服器其以為你是從http://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/
獲取url指向的頁面/資源文件;如果URL指向的是文件或者圖片等資源文件,資源文件可以直接下載到本地
curl http://www.baidu.com
提交GET請求
curl "wwww.baidu.com?wd=jenkins」
提交POST請求
curl -d "wd=jenkins」 www.baidu.com
我們可以用這個命令來做很多事情,可以對jenkins進行許多操作。
Jenkins 運行job
無參任務
curl -X POST http://localhost:8080/jenkins/job/plugin%20demo/build --user admin:admin
不設置參數/使用默認參數
curl -X POST http://localhost:8080/jenkins/job/commandTest/buildWithParameters --user admin:admin
設置參數方法1
url -X POST http://localhost:8080/jenkins/job/commandTest/buildWithParameters -d port=80
設置參數方法2
curl -X POST http://localhost:8080/jenkins/job/commandTest/buildWithParameters -d port=80 --data-urlencode json="{"parameter": [{"name": "port", "value": "80"}]}」
多參數
http://localhost:8080/jenkins/job/commandTest/buildWithParameters -d param1=value1¶m2=value
創建job
1).創建job目錄
~/.jenkins/jobs/jobfromcmd
2).創建config.xml文件(可從其他工程中複製)
curl -X POST http://localhost:8080/jenkins/createItem?name=jobfromcmd --user admin:admin --data-binary "@config.xml" -H "Content-Type: text/xml」
刪除job
curl -X POST http://localhost:8080/jenkins/job/jobfromcmd/doDelete
查詢job的狀態
curl --silent ${JENKINS_SERVER}/job/JOB_NAME/lastBuild/api/json
獲取build的num
curl --silent ${JENKINS_SERVER}/job/JOB_NAME/lastBuild/buildNumber
獲取最近成功的build的num
curl --silent ${JENKINS_SERVER}/job/JOB_NAME/lastStableBuild/buildNumber
當然我們還可以用python的request請求來實現:
requests.get(self.apk_url, auth=(shirley.licp, 1)).content
推薦閱讀:
※軟體測試的入行與轉行
※工具應用:使用JMeter實現Phpwind的性能測試
※webdriver介紹&與Selenium RC的比較1
※Xebium詳解01-簡介
※自學軟體測試如何得到項目經驗