cURL 如何只返回狀態碼 status code


在寫一些 Shell 測試用例時需要檢測 url 的狀態是否為 200,這時如果能只獲取它的狀態碼是最理想的,cURL 可以很方便的實現。

 

-w 可以格式化輸出 reponse 的返回結果。

1
2
3
4
5
6
7
8
9
10
$ 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%

訪問帶有跳轉性質的網站,我們還需要加上 -L 做進一步跳轉,同時為了避免當資源過大請求緩慢的情況,通過 -I 只返回頭信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
$ curl -IL -w "%{http_code}" https://baidu.com

HTTP/1.1 302 Moved Temporarily
Server: bfe/1.0.8.18
Date: Thu, 06 Jun 2019 00:25:02 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, 06 Jun 2019 00:25:05 GMT
Etag: "575e1f60-115"
Last-Modified: Mon, 13 Jun 2016 02:50:08 GMT
Pragma: no-cache
Server: bfe/1.0.8.18

200%

然后隱藏掉打印信息,將打印的結果輸出到 /dev/null

1
2
3
4
5
6
$ curl -IL -w "%{http_code}" -o /dev/null https://baidu.com
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 161 0 0 0 0 0 0 --:--:-- 0:00:03 --:--:-- 0
0 277 0 0 0 0 0 0 --:--:-- 0:00:03 --:--:-- 0
200%

竟然還有多余信息,繼續使用 -s 不顯示進度和錯誤信息

1
2
$ curl -sIL -w "%{http_code}" -o /dev/null https://baidu.com
200%

最后的最后,默認輸出是不換行的,也就是會帶有一個 % 符號,我們有兩種方式去掉它

輸出換行

1
2
$ curl -sIL -w "%{http_code}\n" -o /dev/null https://baidu.com
200

使用 echo

1
2
$ echo $(curl -sIL -w "%{http_code}" -o /dev/null https://baidu.com)
200

-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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM