自學shell之curl

自學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

執行後,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中只要增加相關參數也是可以很容易的處理cookie

4.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

這樣就會讓伺服器其以為你是從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&param2=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

更多精彩,請關注微信公眾號: python愛好部落

推薦閱讀:

軟體測試的入行與轉行
工具應用:使用JMeter實現Phpwind的性能測試
webdriver介紹&與Selenium RC的比較1
Xebium詳解01-簡介
自學軟體測試如何得到項目經驗

TAG:Linux | 軟體測試 | 自動化測試 |