Curl命令分析接口耗时

简介: Curl是一个非常实用的,用来与服务器之间传输数据的工具,支持的协议包括 (DICT, FILE, FTP, FTPS, GOPHER, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMTP, SMTPS, TELNET and TFTP),Curl设计为无用户交互下完成工作。

     Curl是一个非常实用的,用来与服务器之间传输数据的工具,支持的协议包括 (DICT, FILE, FTP, FTPS, GOPHER, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMTP, SMTPS, TELNET and TFTP),Curl设计为无用户交互下完成工作。
  Curl提供了一大堆非常有用的功能,包括代理访问、用户认证、Ftp上传下载、HTTP POST、SSL连接、Cookie支持、断点续传 。。。

       本文主要分享下Curl -w参数相关功能,通过此命令行定位分析API接口的请求耗时情况,以便快速高效解决链路存在的问题。

      Curl 命令提供了 -w 参数,此参数在 man page 解释如下:


-w, --write-out <format>
              Make curl display information on stdout after a completed transfer. The format is a string that may contain plain text mixed with any number of variables. The  format
              can  be  specified  as  a literal "string", or you can have curl read the format from a file with "@filename" and to tell curl to read the format from stdin you write
              "@-".
              The variables present in the output format will be substituted by the value or text that curl thinks fit, as described below. All variables are specified  as  %{vari‐
              able_name} and to output a normal % you just write them as %%. You can output a newline by using \n, a carriage return with \r and a tab space with \t.

即:此命令行能够按照指定的格式打印某些特定信息,里面可以使用某些特定的变量,而且支持 \n、\t和 \r 转义字符。并且其提供的变量也很多,比如 status_code、local_port、size_download 等等,在实际项目中我们只需关注和请求时间有关的变量(以 time_ 开头的变量),即可满足解决问题所需。

       此参数如何使用呢?很简单,只需以下步骤即可完成:

       1、创建curl-format.txt文本,定义参数变量


[administrator@JavaLangOutOfMemory ~ ]% vi curl-format.txt
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}\n

变量含义如下:

  • time_namelookup:DNS 域名解析的时候,就是把 https://zhihu.com 转换成 ip 地址的过程
  • time_connect:TCP 连接建立的时间,就是三次握手的时间
  • time_appconnect:SSL/SSH 等上层协议建立连接的时间,比如 connect/handshake   的时间
  • time_redirect:从开始到最后一个请求事务的时间
  • time_pretransfer:从请求开始到响应开始传输的时间
  • time_starttransfer:从请求开始到第一个字节将要传输的时间
  • time_total:请求花费的总共时间

2、借助Curl命令行 curl -w "@curl-format.txt" -o /dev/null -s -L执行


[administrator@JavaLangOutOfMemory ~ ]% curl -w "@curl-format.txt" -o /dev/null -s -L "https://de
time_namelookup:  0.002834
       time_connect:  0.044624
    time_appconnect:  0.166298
      time_redirect:  0.100450
   time_pretransfer:  0.166663
 time_starttransfer:  1.462707
                    ----------
         time_total:  1.574913


     可以看到本次请求各个步骤的时间戳都打印出来了,每个数字的单位都是秒(seconds),这样可以分析哪一步、那一个环节比较耗时,方便定位问题。

       这个命令各个参数的意义:

       -w:从文件中读取要打印信息的格式

       -o /dev/null:把响应的内容丢弃,因为我们这里并不关心它,只关心请求的耗时情况

       -s:不要打印进度条

       从这个结果输出可以得知:此站点带有中间有重定向和 SSL 协议。可以看到 time_appconnect 和 time_redirect 都不是 0 了,其中 SSL 协议处理时间为( 0.166298-0.044624 )s。而且 pretransfer和 starttransfer 的时间都缩短了,这是重定向之后请求的时间。我们可以算出各个步骤的时间:


DNS 查询:0.002834s
 TCP 连接时间:pretransfter(0.044624) - namelookup(0.002834) s
 服务器处理时间:starttransfter(1.462707) - pretransfer(0.166663) s
 内容传输时间:total(1.574913) - starttransfer(1.462707) s

     综上所述,工作中若遇到某个接口请求的响应特别慢,我们可借助此种方法能够分析到底请求的哪一步耗时比较长,好进一步找到问题的根本原因。

相关文章
|
6月前
|
JSON 测试技术 数据格式
性能工具之 Locust 工具 Get 与 Post 请求
【4月更文挑战第7天】性能工具之 Locust 工具 Get 与 Post 请求
65 1
|
3月前
.NetCore 接口请求耗时记录
.NetCore 接口请求耗时记录
34 0
|
6月前
|
JSON Java 测试技术
性能工具之 nGrinder Post 请求脚本
【5月更文挑战第4天】性能工具之 nGrinder Post 请求脚本
44 2
性能工具之 nGrinder Post 请求脚本
|
6月前
|
测试技术 Serverless iOS开发
PTS接口问题之执行请求失败如何解决
PTS(Performance Testing Service)是一项面向网站、应用等提供的压力测试服务,用于模拟不同场景下的用户访问,评估系统的性能表现;在进行PTS压测时,可能会出现一些异常或报错,本合集将PTS压测中频繁出现的问题及其解决办法进行汇编,旨在帮助用户更有效地进行性能测试和问题定位。
|
6月前
|
tengine Java 测试技术
PTS压测问题之调试返回403如何解决
PTS(Performance Testing Service)是一项面向网站、应用等提供的压力测试服务,用于模拟不同场景下的用户访问,评估系统的性能表现;在进行PTS压测时,可能会出现一些异常或报错,本合集将PTS压测中频繁出现的问题及其解决办法进行汇编,旨在帮助用户更有效地进行性能测试和问题定位。
178 2
|
数据安全/隐私保护
深入解析 curl:掌握命令行的网络传输利器
当我们使用 `curl` 进行网络请求时,了解如何有效地使用参数是非常重要的。`curl` 提供了许多参数,用于控制请求的行为和配置。在这篇博客文章中,我们将详细解释一些常用的 `curl` 参数,帮助你更好地理解如何利用这个强大的工具。
274 2
深入解析 curl:掌握命令行的网络传输利器
|
JSON 数据格式
wrk post lua脚本取excel参数压力测试,判断接口性能
wrk post lua脚本取excel参数压力测试,判断接口性能
222 0
|
移动开发 网络协议 Python
python|获取接口请求耗时
python|获取接口请求耗时
196 1
|
监控 Java 开发者
基于javaagent监控方法执行耗时
javaagent是在JDK5之后提供的新特性,也可以叫java代理。开发者通过这种机制(Instrumentation)可以在加载class文件之前修改方法的字节码(此时字节码尚未加入JVM),动态更改类方法实现AOP,提供监控服务如;方法调用时长、可用率、内存等。
457 0
基于javaagent监控方法执行耗时
|
JSON 数据安全/隐私保护 数据格式
CURL常用命令记录--用于简单测试接口
CURL常用命令记录--用于简单测试接口
196 0