• 如何使用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.发起请求

    url -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
    -s 通知cURL不显示进度条
    "http://wordpress.com/" 是我们请求的URL,请使用引号包围(尤其当你的URL包含&查询字符串)

    文本输出

     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还有一个小技巧,模拟连接/传输超时。

    连接超时时间用--connect-timeout参数来指定,数据传输的最大允许时间用-m参数来指定。

    连接超时的话,出错提示形如:
    curl: (28) connect() timed out!

    数据传输的最大允许时间超时的话,出错提示形如:
    curl: (28) Operation timed out after 2000 milliseconds with 0 bytes received


    本文来自博客园,作者:{有态度的马甲},转载请注明原文链接:https://www.cnblogs.com/JulianHuang/p/15682055.html

    欢迎关注我的原创技术、职场公众号, 加好友谈天说地,一起进化
    上海鲜花港 - 郁金香
  • 相关阅读:
    Base64 加密之中文乱码
    JAVA 笔记 ReadWriteLock
    手机上的消息推送
    Erlang 聊天室程序(九) 主题房间2 房间信息管理
    阿里云服务器上安装GCC
    jq实现窗帘式图片
    Oracle版本问题!【急急急】
    解决 VSCode git commit 时 No such file or directory 报错问题
    GIT Authentication failed for错误问题处理
    h5接入微信分享sdk,报错Cannot read property of undefined (reading 'title')
  • 原文地址:https://www.cnblogs.com/JulianHuang/p/15682055.html
Copyright © 2020-2023  润新知