linux curl 使用詳解 常見應用

curlhtml


1 http 超時web

-m 指定超時的時間 等於--connect-timeoutshell


2 輸出到空json

-o /dev/null 不輸出,正常是輸出html格式api


3 -w 指定格式輸出bash


4 -s 去掉全部狀態信息的輸出服務器


5 -F 上傳表單app


6 -e/--referer <URL>  指定refererdom


7 -H/--header <header> 指定Header頭部curl


8 -v 查看詳細的請求創建信息,能夠看到request的Header頭部


9 -L 當重定向的時候,發起新的請求


10 --user 認證的用戶名


11 -XGET  請求方式,默認是GET


12 --data-binary  以二進制的方式上傳,沒有任何處理

 

13 --data-urlencode 大體等同於-d 或者--data


14 -o Write output to <file> instead of stdout


15 -x 代理訪問


三者區別:

-d/--data is the same as --data-ascii. To post data purely binary, you should instead use the --data-binary option. To URL-encode  the

value of a form field you may use --data-urlencode.





應用一: 超時設置


curl -m 3 -o /dev/null -s -w %{http_code}"\n"  www.letuknowit.com


只輸出狀態碼,並換行"\n"



注意若是超時 http_code 是 000



應用二: 探測web各個鏈路創建響應的時間點


curl -o /dev/null -s -w %{time_connect}:%{time_starttransfer}:%{time_total}:%{time_namelookup}"\n" http://www.canada.com


0.081:0.272:0.779:0.356


清單 1 給出對一個流行的新聞站點執行 curl 命令的狀況.輸出一般是 HTML 代碼,經過 -o 參數發送到 /dev/null.-s 參數去掉全部狀態信息.-w 參數讓 curl 寫出表 1 列出的計時器的狀態信息:


表 1. curl 使用的計時器


計時器描述

time_connect創建到服務器的 TCP 鏈接所用的時間

time_starttransfer在發出請求以後,Web 服務器返回數據的第一個字節所用的時間

time_total完成請求所用的時間

time_namelookupDNS解析時間,從請求開始到DNS解析完畢所用時間(記得關掉 Linux 的 nscd 的服務測試)

speed_download下載速度,單位-字節每秒。

這些計時器都相對於事務的起始時間,甚至要先於 Domain Name Service(DNS)查詢.所以,在發出請求以後,Web 服務器處理請求並開始發回數據所用的時間是 0.272 – 0.081 = 0.191 秒.客戶機從服務器下載數據所用的時間是 0.779 – 0.272 = 0.507 秒.



如排除問題:

dns問題:

psb1.jpg



解決後:

psb2.jpg



應用三: 上傳表單數據 上傳圖片

curl -e "http://www.kkfang.com/cuizhiliang" -F "filename=@./testtest_1111.jpg" "http://upload.kkfang.com/upload/housea.html"



示例:

-F/--form <name=content

curl -F "file=@localfile;filename=nameinpost" url.com



@後面接的是一個文件路徑



應用四: 模擬修改Header頭部


-H "Cache-Control:no-cache"

curl  -x127.0.0.1:6081 "http://www.kkfang.com/bj" -H "User-agent:"Googlebot""


多個Header頭一塊兒使用


curl -v -I -H "Host:www.kkfang.com" -H "User-Agent:Ba" http://www.kkfang.com


curl -v -I -H "Host:www.kkfang.com" -H "User-Agent:Ba"  -H "Cache-Control:no-cache" http://www.kkfang.com





應用五: 重定向的主站

curl -IL  http://www.dianping.com


會302 跳轉到城市列表頁 Location:/citylist


301重定向與302重定向的區別

  302重定向是暫時的重定向,搜索引擎會抓取新的內容而保留舊的網址。由於服務器返回302代碼,搜索引擎認爲新的網址只是暫時的。 SEO 302好於301

  301重定向是永久的重定向,搜索引擎在抓取新內容的同時也將舊的網址替換爲重定向以後的網址。




應用六: --user  調用jenkins的api 獲取配置文件

curl -XGET http://jenkins.anhouse.com.cn/job/ST-ananzu-service/config.xml --user cuizhiliang344:Czl110123






應用七: post數據,加上shell的變量傳遞,執行jenkins JOB並修改數據

/usr/bin/curl -m 5 -s -w %{http_code} -X POST JENKINS_URL/job/JOB_NAME/build --data-urlencode json='{"parameter": [{"name":"id", "value":"123"}, {"name":"'${_TASK_NAME}'", "value":"high"}]}'



上json數據  而且變量中存在變量

方法1: "'" ${shell變量}"'"

curl -s --url $QINIU_FLUX_API -X POST  -H "Content-Type: application/json"  -H "Authorization: $QINIU_FLUX_TOKEN"  -d '{

    "startDate": "'"$YESTERDAY"'",

    "endDate": "'"$YESTERDAY"'",

    "granularity": "day",

    "domains": "dfs.anhouse.com;img.anhouse.com;cdn-event.pinganfang.com;cdn-event.m.pinganfang.com"

}' > ${QINIU_FLUX_STATUS}


方法2: '${變量}' 如如下的兩個區別

#值所在的表明值


declare -A TYPE_ID
TYPE_ID=([internal]=0 [external]=1
        #注意上下區分 傳遞的類型不一樣
for _type in external internal
do
        #/usr/bin/curl -s ${URLAPI} -H  "Content-type: application/json" -X POST -d '{"domain_type":"'"${TYPE_ID["${_type}"]}"'","total":"'"${_type_number}"'","stats_time":"'"${F_YESTERDAY}"'"}'
        /usr/bin/curl -s ${URLAPI} -H  "Content-type: application/json" -X POST -d '{"domain_type":'${TYPE_ID["${_type}"]}',"total":'${_type_number}',"stats_time":"'"${F_YESTERDAY}"'"}'
done



註釋: 若是post上傳的應用程序total參數只接受int型,那麼只能用下面的方法,上面的方式會出現string的類型。


應用八: 輸出內容

curl -s -XGET http://jenkins.anhouse.com.cn/job/ST-ananzu-service/config.xml --user cuizhiliang344:Czl110123   -o config.txt


或者使用> 進行重定向

curl -s -XGET http://jenkins.anhouse.com.cn/job/ST-ananzu-service/config.xml --user cuizhiliang344:Czl110123  > config.txt

相關文章
相關標籤/搜索