📜  curl 查找延迟 - Shell-Bash (1)

📅  最后修改于: 2023-12-03 15:00:10.847000             🧑  作者: Mango

Curl命令介绍

Curl是一个用于传输数据的命令行工具,在Linux和其他操作系统中都可以使用。它支持多种协议,如HTTP、FTP、SMTP等。在程序员的工作中,Curl常用于调试网络API和获取数据。

Curl的基本用法

Curl的基本用法如下:

curl [选项] [URL]

其中,选项包括:

  • -X:指定HTTP请求方法;
  • -H:指定HTTP请求头;
  • -d:指定HTTP请求体;
  • -I:仅获取HTTP响应头;
  • -L:跟随重定向;
  • -o:将数据输出到文件。

例如,要获取网页的内容,可以使用以下命令:

curl https://www.example.com
使用Curl查找延迟

延迟是网络连接的一个重要指标,它反映了从发送数据到接收数据所需的时间。在程序员的工作中,我们经常需要查找网络延迟,以便优化网络应用。下面介绍两种使用Curl查找延迟的方法。

1. 使用--trace选项

Curl的--trace选项可以记录整个HTTP请求和响应的过程,我们可以从中获取网络延迟。

例如,使用以下命令获取网页的延迟:

curl --trace - https://www.example.com

其中,-表示将日志输出到标准输出。运行命令后,会输出类似以下内容的日志:

== Info: Connected to www.example.com (93.184.216.34) port 443 (#0)
== Info: ALPN, offering http/1.1
== Info: Cipher selection: ALL:!EXPORT:!EXPORT40:!EXPORT56:!aNULL:!LOW:!RC4-SHA:!DSS:!MD5:!PSK:!SRP:!CAMELLIA128:!ECDHE-RSA-AES128-GCM-SHA256:!ECDHE-ECDSA-AES128-GCM-SHA256:!ECDHE-RSA-AES128-SHA256:!ECDHE-ECDSA-AES128-SHA256
== Info: successfully set certificate verify locations:
== Info:   CAfile: /etc/ssl/certs/ca-certificates.crt
  CApath: /etc/ssl/certs
[...]
== Info: SSL connection using TLSv1.3 / TLS_AES_256_GCM_SHA384
== Info: ALPN, server did not agree to a protocol
== Info: Server certificate:
== Info:  subject: CN=*.example.com
== Info:  start date: Dec  8 00:00:00 2021 GMT
== Info:  expire date: Dec  6 23:59:59 2022 GMT
== Info:  subjectAltName: host "www.example.com" matched cert's "*.example.com"
== Info:  issuer: C=US; O=Internet Security Research Group; CN=ISRG Root X1
== Info:  SSL certificate verify ok.
[...]
== Info: GET / HTTP/1.1
== Info: Host: www.example.com
== Info: User-Agent: curl/7.68.0
== Info: Accept: */*
== Info:
[...]
== Info: HTTP/1.1 200 OK
== Info: Content-Type: text/html; charset=UTF-8
== Info: Date: Mon, 27 Dec 2021 02:15:20 GMT
== Info: Expires: -1
== Info: Cache-Control: private, max-age=0
== Info: Server: gws
== Info: X-XSS-Protection: 0
== Info: X-Frame-Options: SAMEORIGIN
== Info: Accept-Ranges: none
== Info: Vary: Accept-Encoding
== Info: Transfer-Encoding: chunked
[...]
== Info: curl 7.68.0 (x86_64-pc-linux-gnu) libcurl/7.68.0 OpenSSL/1.1.1k zlib/1.2.11 brotli/1.0.9 libidn2/2.3.0 libpsl/0.20.2 (+libidn2/2.3.0) libssh2/1.9.0 nghttp2/1.40.0 librtmp/2.3

在日志中,我们可以找到以下信息:

  • == Info: connected to www.example.com: 连接成功的时间;
  • == Info: SSL connection using TLSv1.3: SSL握手完成的时间;
  • == Info: GET / HTTP/1.1: 发送请求的时间;
  • == Info: HTTP/1.1 200 OK: 接收响应的时间。

我们可以根据这些信息计算出整个HTTP请求和响应的延迟。

2. 使用--write-out选项

Curl的--write-out选项可以输出指定格式的数据,我们可以使用它输出网络延迟。

例如,使用以下命令获取网页的延迟:

curl --write-out "time_namelookup:%{time_namelookup}\ntime_connect:%{time_connect}\ntime_appconnect:%{time_appconnect}\ntime_pretransfer:%{time_pretransfer}\ntime_redirect:%{time_redirect}\ntime_starttransfer:%{time_starttransfer}\ntime_total:%{time_total}\n" -o /dev/null -s https://www.example.com

其中,--write-out后的字符串表示输出的格式,各字段的含义如下:

  • time_namelookup:DNS解析的时间;
  • time_connect:TCP连接的时间;
  • time_appconnect:SSL握手的时间;
  • time_pretransfer:从发起请求到响应开始传输的时间;
  • time_redirect:重定向的时间;
  • time_starttransfer:接收到第一个字节的时间;
  • time_total:整个请求和响应的时间。

本命令还使用了-o /dev/null -s选项,表示将输出重定向到/dev/null,不输出到标准输出,同时使用-s选项禁用进度条。

结论

本文介绍了Curl的基本用法和两种用于查找网络延迟的方法,包括使用--trace和--write-out选项。通过这些方法,我们可以更方便地优化网络应用。