Linux - curl -w 參數詳解


-w 的作用

  • 完成請求傳輸后,使 curl 在 stdout 上顯示自定義信息
  • 格式是一個字符串,可以包含純文本和任意數量的變量

 

輸出格式

  1. 輸出格式中的變量會被 curl 用對應的值替換掉
  2. 所有變量的格式為: %{variable name} 
  3. 要輸出一個普通的 % 只需將它們寫為 %%
  4. 可以使用 \n、帶 \r 的回車符和帶 \t 的制表符來輸出換行符
  5. 如果想通過文件來傳入變量,可以用 @filename 的格式

 

變量列表

content_type(有用)

HTTP 請求的 Content-type

 

errormsg(有用)

錯誤信息

 

exitcode

轉移的數字出口代碼,不知道啥來的

 

filename_effective

curl 執行結果最終寫入的文件名,當加上了 -o、-O 才有意義

 

ftp_entry_path 

初始路徑,當登錄到遠程 FTP 服務器時結束

 

http_code(有用)

響應碼

 

http_connect 

在對 curl CONNECT 請求的最后響應(來自代理)中找到的數字代碼

 

http_version 

http 版本

 

local_ip(有用)

ip 地址,可以是ipv4,也可以是ipv6

 

num_connects

最近傳輸中,新的連接數

 

num_redirects

在請求中跳轉的次數

 

redirect_url 

當 curl 沒有指定 -L、--location 參數跟隨重定向時,此變量將顯示重定向實將跳轉的實際 URL

 

remote_ip(有用)

目標服務器的遠程IP,可以是 ipv4、ipv6

 

remote_port(有用)

目標服務器的遠程端口

 

response_code(有用)

和 http_code 一樣,都是響應碼

 

scheme

請求協議,就是 HTTP、HTTPS

 

size_download

下載的總字節數

 

size_header

下載頭的總字節數

 

size_request(有用)

HTTP請求中發送的總字節數

 

size_upload

上傳的總字節數

 

speed_download

平均下載速度,每秒字節數

 

speed_upload

平均上傳速度,每秒字節數

 

time_namelookup(有用)

DNS 域名解析的耗時,就是把 https://zhihu.com 轉換成 ip 地址的過程

 

time_connect(有用)

TCP 連接建立的時間,就是三次握手的時間

 

time_appconnect(有用)

SSL/SSH 等上層協議建立連接的時間,比如 connect/handshake 的時間

 

time_redirect(有用)

  • 在最終事務開始之前,所有重定向步驟(包括名稱查找、連接、預傳輸和傳輸)所用的時間(以秒為單位)
  • time_redirect 顯示多個重定向的完整執行時間

 

time_pretransfer(有用)

從請求開始到響應開始傳輸的時間

 

time_starttransfer(有用)

  • 從請求開始到第一個字節將要傳輸的時間
  • 包括預傳輸時間和服務器處理結果所需的時間。

 

time_total(有用)

這次請求花費的全部時間

 

url_effective(有用)

  • 最后獲取的 URL
  • 如果 curl 添加了 -L 且真的重定向之后,這個就很有用了

 

使用 curl 命令分析請求的耗時情況

實際工作中的問題

某個請求的響應特別慢,那想要分析為什么這個請求慢,到底是哪一步耗時長,應該怎么做?

 

強大的 curl -w

提供了 7 種 time 變量,上面就能看到

 

寫一個文件,包含 7 種變量,還能比較好看的格式化輸出

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

 

請求 http

 curl -w "@format.txt" -S -s -L -k -o /dev/null http://baidu.com

所有時間都是秒單位

  • DNS 解析查詢時間:time_namelookup【 0.004146】
  • TCP 建立連接時間:time_connect【0.013002】 - time_namelookup【0.004146】
  • 服務器處理時間:time_starttransfer【0.02542】-time_pretransfer【0.013039】
  • 內容傳輸時間:time_totle【0.072124】-time_starttransfer【0.02542】

因為不是 https 協議和重定向,所以中間兩個沒有時間

 

請求 https

curl -w "@format.txt" -S -s -L -k -o /dev/null https://baidu.com

SSL 協議處理時間:time_appconnect【0.042989】 - time_namelookup【 0.008223】

 


免責聲明!

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



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