前言:在写一些 Shell 测试用例时需要检测 url 的状态是否为 200
,这时如果能只获取它的状态码是最理想的,curl 可以很方便的实现。
一、-w
可以格式化输出 reponse 的返回结果。
[root@master ~]# curl -w '%{http_code}' https://baidu.com
<html>
<head><title>302 Found</title></head>
<body bgcolor="white">
<center><h1>302 Found</h1></center>
<hr><center>bfe/1.0.8.18</center>
</body>
</html>
302[root@master ~]#
二、访问带有跳转性质的网站,我们还需要加上 -L
做进一步跳转,同时为了避免当资源过大请求缓慢的情况,通过 -I
只返回头信息
[root@master ~]# curl -IL -w '%{http_code}' https://baidu.com
HTTP/1.1 302 Moved Temporarily
Server: bfe/1.0.8.18
Date: Thu, 05 May 2022 07:47:12 GMT
Content-Type: text/html
Content-Length: 161
Connection: keep-alive
Location: http://www.baidu.com/
HTTP/1.1 200 OK
Accept-Ranges: bytes
Cache-Control: private, no-cache, no-store, proxy-revalidate, no-transform
Connection: keep-alive
Content-Length: 277
Content-Type: text/html
Date: Thu, 05 May 2022 07:47:13 GMT
Etag: "575e1f6f-115"
Last-Modified: Mon, 13 Jun 2016 02:50:23 GMT
Pragma: no-cache
Server: bfe/1.0.8.18
200[root@master ~]#
三、然后隐藏掉打印信息,将打印的结果输出到 /dev/null
[root@master ~]# curl -IL -w '%{http_code}' https://baidu.com -o /dev/null
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 161 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
0 277 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
200[root@master ~]#
四、继续使用 -s
不显示进度和错误信息
[root@master ~]# curl -sIL -w '%{http_code}' https://baidu.com -o /dev/null
200[root@master ~]#
五、默认输出是不换行的,
方法一:输出换行
[root@master ~]# curl -sIL -w "%{http_code}\n" -o /dev/null https://baidu.com
200
[root@master ~]#
方法二:使用 echo
[root@master ~]# echo $(curl -sIL -w "%{http_code}" -o /dev/null https://baidu.com)
200
[root@master ~]#
-w
的一些其它参数
- url_effective 最终获取的url地址,尤其是当你指定给curl的地址存在301跳转,且通过-L继续追踪的情形。
- http_code http状态码,如200成功,301转向,404未找到,500服务器错误等。(The numerical response code that was found in the last retrieved HTTP(S) or FTP(s) transfer. In 7.18.2 the alias response_code was added to show the same info.)
- http_connect The numerical code that was found in the last response (from a proxy) to a curl CONNECT request. (Added in 7.12.4)
- time_total 总时间,按秒计。精确到小数点后三位。 (The total time, in seconds, that the full operation lasted. The time will be displayed with millisecond resolution.)
- time_namelookup DNS解析时间,从请求开始到DNS解析完毕所用时间。(The time, in seconds, it took from the start until the name resolving was completed.)
- time_connect 连接时间,从开始到建立TCP连接完成所用时间,包括前边DNS解析时间,如果需要单纯的得到连接时间,用这个time_connect时间减去前边time_namelookup时间。以下同理,不再赘述。(The time, in seconds, it took from the start until the TCP connect to the remote host (or proxy) was completed.)
- time_appconnect 连接建立完成时间,如SSL/SSH等建立连接或者完成三次握手时间。(The time, in seconds, it took from the start until the SSL/SSH/etc connect/handshake to the remote host was completed. (Added in 7.19.0))
- time_pretransfer 从开始到准备传输的时间。(The time, in seconds, it took from the start until the file transfer was just about to begin. This includes all pre-transfer commands and negotiations that are specific to the particular protocol(s) involved.)
- time_redirect 重定向时间,包括到最后一次传输前的几次重定向的DNS解析,连接,预传输,传输时间。(The time, in seconds, it took for all redirection steps include name lookup, connect, pretransfer and transfer before the final transaction was started. time_redirect shows the complete execution time for multiple redirections. (Added in 7.12.3))
- time_starttransfer 开始传输时间。在发出请求之后,Web 服务器返回数据的第一个字节所用的时间(The time, in seconds, it took from the start until the first byte was just about to be transferred. This includes time_pretransfer and also the time the server needed to calculate the result.)
- size_download 下载大小。(The total amount of bytes that were downloaded.)
- size_upload 上传大小。(The total amount of bytes that were uploaded.)
size_header 下载的header的大小(The total amount of bytes of the downloaded headers.)- size_request 请求的大小。(The total amount of bytes that were sent in the HTTP request.)
- speed_download 下载速度,单位-字节每秒。(The average download speed that curl measured for the complete download. Bytes per second.)
- speed_upload 上传速度,单位-字节每秒。(The average upload speed that curl measured for the complete upload. Bytes per second.)
- content_type 就是content-Type,不用多说了,这是一个访问我博客首页返回的结果示例(text/html; charset=UTF-8);(The Content-Type of the requested document, if there was any.)
- num_connects 最近的的一次传输中创建的连接数目。Number of new connects made in the recent transfer. (Added in 7.12.3)
- num_redirects 在请求中跳转的次数。Number of redirects that were followed in the request. (Added in 7.12.3)
- redirect_url When a HTTP request was made without -L to follow redirects, this variable will show the actual URL a redirect would take you to. (Added in 7.18.2)
- ftp_entry_path 当连接到远程的ftp服务器时的初始路径。The initial path libcurl ended up in when logging on to the remote FTP server. (Added in 7.15.4)
- ssl_verify_result ssl认证结果,返回0表示认证成功。( The result of the SSL peer certificate verification that was requested. 0 means the verification was successful. (Added in 7.19.0))