cURL 如何只返回状态码 status code
在写一些 Shell 测试用例时需要检测 url 的状态是否为 200
,这时如果能只获取它的状态码是最理想的,cURL 可以很方便的实现。
-w
可以格式化输出 reponse 的返回结果。
1
|
$ curl -w "%{http_code}" https://baidu.com
|
访问带有跳转性质的网站,我们还需要加上 -L
做进一步跳转,同时为了避免当资源过大请求缓慢的情况,通过 -I
只返回头信息
1
|
$ curl -IL -w "%{http_code}" https://baidu.com
|
然后隐藏掉打印信息,将打印的结果输出到 /dev/null
1
|
$ curl -IL -w "%{http_code}" -o /dev/null https://baidu.com
|
竟然还有多余信息,继续使用 -s
不显示进度和错误信息
1
|
$ curl -sIL -w "%{http_code}" -o /dev/null https://baidu.com
|
最后的最后,默认输出是不换行的,也就是会带有一个 %
符号,我们有两种方式去掉它
输出换行
1
|
$ curl -sIL -w "%{http_code}\n" -o /dev/null https://baidu.com
|
使用 echo
1
|
$ echo $(curl -sIL -w "%{http_code}" -o /dev/null https://baidu.com)
|
-w
的一些其它参数,没有注明的可以自行测试下
url_effective
http_code
状态码http_connect
time_total
请求总用时time_namelookup
DNS 域名解析的时候,就是把 https://baidu.com 转换成 ip 地址的过程time_connect
TCP 连接建立的时间,就是三次握手的时间time_appconnect
SSL/SSH 等上层协议建立连接的时间,比如 connect/handshake 的时间time_redirect
从开始到最后一个请求事务的时间time_pretransfer
从请求开始到响应开始传输的时间time_starttransfer
从请求开始到第一个字节将要传输的时间size_download
size_upload
size_header
size_request
speed_download
speed_upload
content_type
num_connects
num_redirects
ftp_entry_path
https://whatua.com/2019/09/17/curl-%E6%9F%A5%E7%9C%8Bhttp%E5%90%84%E7%8E%AF%E8%8A%82%E6%97%B6%E9%97%B4/
vim curl-time.txt 添加以下内容
\n remote_ip: %{remote_ip}\n remote_port: %{remote_port}\n local_ip: %{local_ip}\n local_port: %{local_port}\n http: %{http_code}\n dns: %{time_namelookup}s\n redirect: %{time_redirect}s\n time_connect: %{time_connect}s\n time_appconnect: %{time_appconnect}s\n time_pretransfer: %{time_pretransfer}s\n time_starttransfer: %{time_starttransfer}s\n size_download: %{size_download}bytes\n speed_download: %{speed_download}B/s\n ----------\n time_total: %{time_total}s\n \n
试一试:
curl -w "@/Users/mac/Desktop/curl-time.txt" www.baidu.com <!DOCTYPE html> <!--STATUS OK--><html>*******</html> remote_ip: 180.101.49.12 #服务器ip remote_port: 80 #服务器端口 local_ip: 30.208.75.45 #本地ip local_port: 49200 #本地端口 http: 200 #http状态码 dns: 0.030925s #从开始到域名解析完成的时间 redirect: 0.000000s #所有重定向步骤(包括名称查找、连接、预传输和传输)所用的时间(秒)。显示多个重定向的完整执行时间。 time_connect: 0.069830s #从开始到tcp协议建立完成的时间 time_appconnect: 0.000000s #从开始到SSL/SSH/etc connect/handshake协议完成的时间 time_pretransfer: 0.070846s #从开始到文件传输即将开始 time_starttransfer: 0.114130s #从开始到第一个字节即将传输(time_starttransfer-time_pretransfer可以代表服务器处理的时间) size_download: 2381bytes #总下载量 speed_download: 20788.000B/s #下载平均速度 ---------- time_total: 0.114534s #也可以直接输出,不用格式化文件方式。例如: # curl -w "time_total:%{time_total}" www.baidu.com
#查看帮助信息 man curl 找到:-w, –write-out 看看哪些变量是需要的可以再添加以下。
================ End