如何使用cURL獲得請求/響應具體耗時?


如何使用cURL一次測量請求和響應時間?

cURL支持格式化輸出請求的詳細信息(請參閱cURL手冊頁的-w、–write out<format>獲取更多信息)。

如題,我們將只關注如何知曉cURL請求的時間細節, 下面時間以s為單位。

1. 創建一個文本文件curl-format.txt, 粘貼下面內容

   time_namelookup:  %{time_namelookup}s\n
        time_connect:  %{time_connect}s\n
     time_appconnect:  %{time_appconnect}s\n
    time_pretransfer:  %{time_pretransfer}s\n
       time_redirect:  %{time_redirect}s\n
  time_starttransfer:  %{time_starttransfer}s\n
                     ----------\n
          time_total:  %{time_total}s\n

2.發起請求

curl -w "@curl-format.txt" -o /dev/null -s "http://wordpress.com/"

在windows機器上是curl -w "@curl-format.txt" -o NUL -s "http://wordpress.com/"

旁白解釋

-w "@curl-format.txt" 通知cURL使用格式化的輸出文件
-o /dev/null 將請求的輸出重定向到/dev/null , 因此 -o body.txt 可以將響應的body輸出到body.txt文件
-s 通知cURL不顯示進度條
"http://wordpress.com/" 是我們請求的URL,請使用引號包圍(尤其當你的URL包含&查詢字符串)

更多參數(參數區分大小寫)請參考 curl--help, 下面記錄一個完整的請求姿勢:

   curl -w "@curl-format.txt" -o ./body.txt  -s  -i -X POST  'http://mdb.qa.xxxx.com/table/instance?method=batch_query'   -H 'Content-Type: application/json'  -d   '["idc in (logicidc_hd1,logicidc_hd2,officeidc_hd1)"]'
 
-H:   Header
-d:   data

文本輸出

 time_namelookup:  0.001s
      time_connect:  0.037s
   time_appconnect:  0.000s
  time_pretransfer:  0.037s
     time_redirect:  0.000s
time_starttransfer:  0.092s
                   ----------
        time_total:  0.164s

輸出的啥意思呢? 我解釋一下:

  • time_namelookup:DNS 域名解析的時候,就是把http://wordpress.com 轉換成ip地址的過程
  • time_connect:TCP 連接建立的時間,就是三次握手的時間
  • time_appconnect:SSL/SSH等上層協議建立連接的時間,比如 connect/handshake 的時間
  • time_pretransfer:從請求開始到響應開始傳輸的時間
  • time_starttransfer:從請求開始到第一個字節將要傳輸的時間
  • time_total:這次請求花費的全部時間

制作成Linux/Mac快捷命令(alise 別名)

alias curltime="curl -w \"@$HOME/.curl-format.txt\" -o /dev/null -s "

制作成Linux/Mac 獨立腳本

腳本不需要單獨的包含格式化的文本。

在可執行路徑中,創建名為curltime的文件,粘貼下面內容:

#!/bin/bash

curl -w @- -o /dev/null -s "$@" <<'EOF'
    time_namelookup:  %{time_namelookup}\n
       time_connect:  %{time_connect}\n
    time_appconnect:  %{time_appconnect}\n
   time_pretransfer:  %{time_pretransfer}\n
      time_redirect:  %{time_redirect}\n
 time_starttransfer:  %{time_starttransfer}\n
                    ----------\n
         time_total:  %{time_total}\n
EOF

制作成windows快捷方式(bat批處理)

把下面的命令寫入curltime.bat:
curl -w "@%~dp0curl-format.txt" -o NUL -s %*

以上手段后,curltime wordpress.org就可以拿到cURL的請求耗時。


curl 有用的小技巧

模擬連接/請求超時, 單位是s.

  • 連接服務器超時用--connect-timeout參數來指定,

連接超時的話,出錯提示形如:
curl: (28) connect() timed out!

  • 設置整個請求的最大允許時間用-m--max-time參數。

數據傳輸的最大允許時間超時的話,出錯提示形如:
curl: (28) Operation timed out after 2000 milliseconds with 0 bytes received


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM