在寫一些 Shell 測試用例時需要檢測 url 的狀態是否為 200
,這時如果能只獲取它的狀態碼是最理想的,cURL 可以很方便的實現。
-w
可以格式化輸出 reponse 的返回結果。
1 |
$ curl -w "%{http_code}" https://baidu.com |
訪問帶有跳轉性質的網站,我們還需要加上 -L
做進一步跳轉,同時為了避免當資源過大請求緩慢的情況,通過 -I
只返回頭信息
1 |
$ curl -IL -w "%{http_code}" https://baidu.com |
然后隱藏掉打印信息,將打印的結果輸出到 /dev/null
1 |
$ curl -IL -w "%{http_code}" -o /dev/null https://baidu.com |
竟然還有多余信息,繼續使用 -s
不顯示進度和錯誤信息
1 |
$ curl -sIL -w "%{http_code}" -o /dev/null https://baidu.com |
最后的最后,默認輸出是不換行的,也就是會帶有一個 %
符號,我們有兩種方式去掉它
輸出換行
1 |
$ curl -sIL -w "%{http_code}\n" -o /dev/null https://baidu.com |
使用 echo
1 |
$ echo $(curl -sIL -w "%{http_code}" -o /dev/null https://baidu.com) |
-w
的一些其它參數,沒有注明的可以自行測試下
url_effective
http_code
狀態碼http_connect
time_total
請求總用時time_namelookup
DNS 域名解析的時候,就是把 https://baidu.com 轉換成 ip 地址的過程time_connect
TCP 連接建立的時間,就是三次握手的時間time_appconnect
SSL/SSH 等上層協議建立連接的時間,比如 connect/handshake 的時間time_redirect
從開始到最后一個請求事務的時間time_pretransfer
從請求開始到響應開始傳輸的時間time_starttransfer
從請求開始到第一個字節將要傳輸的時間size_download
size_upload
size_header
size_request
speed_download
speed_upload
content_type
num_connects
num_redirects
ftp_entry_path
https://whatua.com/2019/09/17/curl-%E6%9F%A5%E7%9C%8Bhttp%E5%90%84%E7%8E%AF%E8%8A%82%E6%97%B6%E9%97%B4/
vim curl-time.txt 添加以下內容
\n remote_ip: %{remote_ip}\n remote_port: %{remote_port}\n local_ip: %{local_ip}\n local_port: %{local_port}\n http: %{http_code}\n dns: %{time_namelookup}s\n redirect: %{time_redirect}s\n time_connect: %{time_connect}s\n time_appconnect: %{time_appconnect}s\n time_pretransfer: %{time_pretransfer}s\n time_starttransfer: %{time_starttransfer}s\n size_download: %{size_download}bytes\n speed_download: %{speed_download}B/s\n ----------\n time_total: %{time_total}s\n \n
試一試:
curl -w "@/Users/mac/Desktop/curl-time.txt" www.baidu.com <!DOCTYPE html> <!--STATUS OK--><html>*******</html> remote_ip: 180.101.49.12 #服務器ip remote_port: 80 #服務器端口 local_ip: 30.208.75.45 #本地ip local_port: 49200 #本地端口 http: 200 #http狀態碼 dns: 0.030925s #從開始到域名解析完成的時間 redirect: 0.000000s #所有重定向步驟(包括名稱查找、連接、預傳輸和傳輸)所用的時間(秒)。顯示多個重定向的完整執行時間。 time_connect: 0.069830s #從開始到tcp協議建立完成的時間 time_appconnect: 0.000000s #從開始到SSL/SSH/etc connect/handshake協議完成的時間 time_pretransfer: 0.070846s #從開始到文件傳輸即將開始 time_starttransfer: 0.114130s #從開始到第一個字節即將傳輸(time_starttransfer-time_pretransfer可以代表服務器處理的時間) size_download: 2381bytes #總下載量 speed_download: 20788.000B/s #下載平均速度 ---------- time_total: 0.114534s #也可以直接輸出,不用格式化文件方式。例如: # curl -w "time_total:%{time_total}" www.baidu.com
#查看幫助信息 man curl 找到:-w, –write-out 看看哪些變量是需要的可以再添加以下。
================ End