如何使用cURL获得请求和响应时间?

dd70141a54a84ed13af839b80d461dab.gif

✎ 码甲说  

     hello,老伙计们,又有半个多月没见了,今天给大家分享一个干货编程小技巧,上至架构师、下至开发者、运维男、QA, 得此利器,事半功倍。

cURL在我的眼里,就是一个httpClient手办,老伙计们知道怎么获得cURL请求的具体耗时吗?  🙃

cURL支持格式化输出请求的详细信息(请参阅cURL手册页的-w、–write out<format>获取更多信息)。

如题,我们只关注如何知晓cURL请求的时间细节, 下面时间以s为单位。

1. 创建一个文本文件curl-format.txt, 粘贴下面内容

time_namelookup:  %{time_namelookup}s\ntime_connect:  %{time_connect}s\ntime_appconnect:  %{time_appconnect}s\ntime_pretransfer:  %{time_pretransfer}s\ntime_redirect:  %{time_redirect}s\ntime_starttransfer:  %{time_starttransfer}s\n----------\ntime_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.001stime_connect:  0.037stime_appconnect:  0.000stime_pretransfer:  0.037stime_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/bashcurl -w @- -o /dev/null -s "$@" <<'EOF'time_namelookup:  %{time_namelookup}\ntime_connect:  %{time_connect}\ntime_appconnect:  %{time_appconnect}\ntime_pretransfer:  %{time_pretransfer}\ntime_redirect:  %{time_redirect}\ntime_starttransfer:  %{time_starttransfer}\n----------\ntime_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

  7fa3ec26821eb687b9d25278d4c73641.gif

●有关[Http持久连接]的一切,卷给你看

●HTTP1.1 Keep-Alive到底算不算长连接?

●宝藏好物gRPCurl

●SignalR 开发到生产部署闭坑指南

●SignalR在React/Go技术栈的实践

●我是状态机, 一颗永远骚动的机器引擎

●你怕是对MD5算法有误解

d27c7934841df2299a953b22fa15de2c.png

点个在看你最好看

e79f347c89486eb94562a5a5f9dd9c25.png

仅代表此刻认知,文章永久更新地址,请移步原文!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/294080.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ASP.NET MVC CheckBoxFor为什么会生成hidden input控件

自己开发的公众号&#xff0c;可以领取淘宝内部优惠券 Html.CheckBoxFor(m > m.Bool) 使用CheckBoxFor方法得到的html代码会是下面这个样子 <input checked"checked" data-val"true" data-val-required"Bool 字段是必需的。" id"Bool…

Android Caused by: java.lang.IllegalArgumentException: column '_id' does not exist

出错原因&#xff1a;在查询整个sqlite数据库时&#xff0c;没有查询到 "_id" 这一列。 原来的代码是&#xff1a;mSQLiteDatabase.query(table_name, new String[] {_title}, null, null, null, null, null); 修改后的代码为&#xff1a;mSQLiteDatabase.query(ta…

linux挂载iso文件

mount -o loop -t iso9660 /root/winxp.iso /mnt 转载于:https://blog.51cto.com/xitong/1148436

android 远程调试工具,Android远程调试的探索与实现

文章来源&#xff1a;美团点评技术团队作为移动开发者&#xff0c;最头疼的莫过于遇到产品上线以后出现了bug&#xff0c;但是本地开发环境又无法复现的情况。常见的调查线上棘手问题方式大概如下&#xff1a;方法优点缺点联系用户安装已添加测试日志的APK方便定位问题需要用户…

.NET 6新特性试用 | 自动生成高性能日志记录代码

前言要想记录日志&#xff0c;常用的方式是访问ILogger实例提供的日志记录方法&#xff1a;private readonly ILogger<WeatherForecastController> _logger;public WeatherForecastController(ILogger<WeatherForecastController> logger) {_logger logger; }[Htt…

3150 Pibonacci数 - Wikioi

题目描述 Description   你可能听说过的Fibonacci数和圆周率Pi。   如果你让这两个概念合并&#xff0c;一个新的深奥的概念应运而生&#xff1a;Pibonacci数。   这些数可以被定义为对于x>0&#xff1a;     如果0<x<4&#xff0c;则P(x) 1 …

Android之状态栏通知Notification、NotificationManager详解

在Android系统中,发一个状态栏通知还是很方便的。下面我们就来看一下,怎么发送状态栏通知,状态栏通知又有哪些参数可以设置? 首先,发送一个状态栏通知必须用到两个类: NotificationManager 、 Notification。 NotificationManager : 是状态栏通知的管理类,负责发通知…

Oracle Enterprises Manager 12C安装

前言 随着时代的进步与发展&#xff0c;Oracle官方于2012年12月1日起正式公布不再为Oracle10g版本提供免费的技术支持服务&#xff0c;而另一款新产品12C也即将面试&#xff0c;C即cloud&#xff0c;伴随着云计算的脚步&#xff0c;他终于粉墨登场了&#xff0c;熊熊第一时间下…

一个简单的MVC模式练习

控制层Action接受从模型层DAO传来的数据&#xff0c;显现在视图层上。 package Action;import java.sql.Connection; import java.sql.SQLException; import java.sql.Statement;import DAO.StuDAO; import Model.Student; import Util.DBUtil;public class StuAction {public …

GraphQL 到底有什么魔力?

GraphQL 起源时间退回到 2012年的一个下午, 美国加利福尼亚州, facebook 的工程师们发现他们才上架没多久的移动端应用就收到了很多差评, 用户反映app响应慢&#xff0c;耗电严重等&#xff0c;经过分析后发现, 应用在第一次启动时, 会请求大量的后端api接口, 这其中包括用户自…

android root工具twrp,安卓手机没有twrp的情况,如何下刷入magisk并获得root权限.

安装adb工具从以上地址下载,然后解压到任意目录(例如C:\adb).将此目录添加到windows环境变量path中.在cmd中输入adb, fastboot等命令,如果"显示"xxx"不是内部或外部命令命令",那么说明你弄错了,去了解一下什么是环境变量吧.如果显示一堆英文,那么说明安装完…

VBA即用型代码手册之打开有密码保护的工作薄

我给VBA下的定义&#xff1a;VBA是个人小型自动化处理的有效工具。可以大大提高自己的劳动效率&#xff0c;而且可以提高数据的准确性。我这里专注VBA,将我多年的经验汇集在VBA系列九套教程中。 作为我的学员要利用我的积木编程思想&#xff0c;积木编程最重要的是积木如何搭建…

Android之使用getIdentifier()获取资源Id

使用getIdentifier()方法可以方便的获各应用包下的指定资源ID。主要有两种方法&#xff1a;&#xff08;1&#xff09;方式一Resources resources context.getResources();int indentify resources. getIdentifier( org.loveandroid.androidtest:drawable/icon", null, …

⑥又是星期五,小试牛刀(编写定制标签)

前言 今天有点迷茫。是身体累了&#xff0c;还是心累了。有种觉得想大哭而无力的感觉&#xff08;可能心还没成熟,或是昨天羽毛球打累了&#xff09;。加油&#xff0c;Jeff Li. 活在当下&#xff0c;坚持打好基础&#xff0c;坚持刷ACM&#xff0c;坚持coding。 今天下午的小故…

为什么要“男孩穷养、女孩富养”

所谓富养女&#xff0c;是说女儿要精细地养&#xff0c;就是在家庭经济条件许可的前提下&#xff0c;尽可能地满足女儿对物质的需求&#xff0c;送她们去参加钢琴、小提琴、音乐、形体等方面的训练&#xff0c;培养她们的高雅气质和大家闺秀的涵养……要从小宠她、爱她,培养她的…

技术分享|前端性能 关键性能指标以及测量工具介绍

源宝导读&#xff1a;对于一款商业软件产品而言&#xff0c;其性能表现往往会直接关系到它的生死存亡&#xff0c;这种说法一点也不夸张&#xff0c;数据显示&#xff0c;40&#xff05;的人放弃了加载时间超过3秒的网站。但是一个网页的加载时间&#xff0c;响应时间的“快”“…

ELKstack-Elasticsearch各类安装部署方法

手动安装部署Elasticsearch 开篇 开篇闲话&#xff0c;如果是新人在接触ELKstack什么都不懂的情况下&#xff0c;可以先看看各位前人写的关于ELKstack的博客&#xff0c;如何对ELKstack部署安装及使用&#xff0c;但是别人的东西只能作为借鉴&#xff0c;在自己搭建使用一定要以…