curl 命令有一個(gè)鮮為人知的選項(xiàng),-w,該選項(xiàng)在請求結(jié)束之后打印本次請求的統(tǒng)計(jì)數(shù)據(jù)到標(biāo)準(zhǔn)輸出。
首先,我們定義控制打印行為的格式化字符串。新建文本文件 fmt.txt,并填入下面的內(nèi)容:
\n
Response Time for: %{url_effective}\n\n
DNS Lookup Time:\t\t%{time_namelookup}s\n
Redirection Time:\t\t%{time_redirect}s\n
Connection Time:\t\t%{time_connect}s\n
App Connection Time:\t\t%{time_appconnect}s\n
Pre-transfer Time:\t\t%{time_pretransfer}s\n
Start-transfer Time:\t\t%{time_starttransfer}s\n\n
Total Time:\t\t\t%{time_total}s\n
curl 提供了很多置換變量,可以在格式化字符串中通過 %{var} 的形式使用。完整的變量列表可以在 curl 的 manpage 中查看。簡單介紹一下我們使用的這幾個(gè)變量:
-
url_effective: 執(zhí)行完地址重定向之后的最終 URL; -
time_namelookup: 從請求開始至完成名稱解析所花的時(shí)間,單位為秒,下同; -
time_redirect: 執(zhí)行所有重定向所花的時(shí)間; -
time_connect: 從請求開始至建立 TCP 連接所花的時(shí)間; -
time_appconnect: 從請求開始至完成 SSL/SSH 握手所花的時(shí)間; -
time_pretransfer: 從請求開始至服務(wù)器準(zhǔn)備傳送文件所花的時(shí)間,包含了傳送協(xié)商時(shí)間; -
time_starttransfer: 從請求開始至服務(wù)器準(zhǔn)備傳送第一個(gè)字節(jié)所花的時(shí)間; -
time_total: 完整耗時(shí)。
然后執(zhí)行請求,通過 @filename 指定保存了格式化字符串的文件:
$ curl -L -s -w @fmt.txt -o /dev/null http://www.google.com
輸出:
Response Time for: http://www.google.co.jp/?gfe_rd=cr&dcr=0&ei=cjIaWpTkHeiQ8QfnxYzoBA
DNS Lookup Time: 0.000038s
Redirection Time: 0.207271s
Connection Time: 0.000039s
App Connection Time: 0.000039s
Pre-transfer Time: 0.000067s
Start-transfer Time: 0.260115s
Total Time: 0.467691s