curl 是一个命令行工具,用于在网络上发送和接收数据。它支持多种协议,包括 HTTP、HTTPS、FTP、SFTP 等,广泛应用于 Web 开发、API 测试和网络调试。
使用场景
- API 测试:可以用于测试 RESTful API 的请求和响应。
- 文件传输:适合进行文件的下载和上传操作。
- 网络调试:用于调试和诊断网络问题,查看请求和响应的详细信息。
- 自动化脚本:可以在脚本中使用,以自动化与服务器的交互。
执行过程:
curl https://ichochy.com
- 创建请求: 使用 curl 命令行工具,指定请求类型(如 GET、POST),URL 和其他必要参数。
- DNS 解析: curl 会将 URL 中的域名解析为 IP 地址。
- 建立连接: 使用 TCP/IP 协议与服务器建立连接。对于 HTTPS 请求,还会进行 SSL/TLS 握手以确保安全。
- 发送请求: 将构造的请求头和请求体发送到服务器。
- 等待响应: 服务器处理请求,并返回响应数据。
- 接收响应: curl 接收响应,包括状态码、响应头和响应体。
- 显示结果: 默认情况下,curl 会在终端显示响应内容。
- 可以使用选项将其保存到文件或进行其他处理。
常用选项
- -X:指定请求方法(GET、POST、PUT、DELETE 等)。
- -H:添加自定义请求头。
- -d:发送数据(通常用于 POST 请求)。
- -F:以表单格式发送数据(用于文件上传)。
- -o:将响应输出到指定文件。
- -s:静默模式,不显示进度或错误信息。
- -v:详细模式,显示请求和响应的详细信息。
- -u:提供基本身份验证的用户名和密码。
- –data-urlencode:对数据进行 URL 编码。
- -L:跟随重定向。
- –max-time:设置最大请求时间。
- -x:设置代理服务器。
- -k:允许不安全的 SSL 连接(跳过证书验证)。
curl -w
支持多种变量,可以用来获取详细的请求信息。
以下是一些常用的变量:
-
时间相关:
- %{time_namelookup}:DNS 查询时间
- %{time_connect}:建立 TCP 连接的时间
- %{time_appconnect}:SSL/TLS 握手时间
- %{time_pretransfer}:准备传输的时间
- %{time_starttransfer}:从请求开始到接收到第一个字节的时间
- %{time_total}:总时间
-
传输相关:
- %{size_download}:下载的字节数
- %{size_upload}:上传的字节数
- %{speed_download}:下载速度(字节/秒)
- %{speed_upload}:上传速度(字节/秒)
-
状态和信息:
- %{http_code}:HTTP 状态码
- %{url_effective}:实际请求的 URL
- %{redirect_count}:重定向次数
- %{num_connects}:连接次数
-
连接信息:
- %{remote_ip}:远程服务器的 IP 地址
- %{local_ip}:本地 IP 地址
-
其他:
- %{content_type}:响应内容类型
- %{header_size}:响应头大小
示例
curl -o /dev/null -s -w "HTTP Status: %{http_code}\nTotal Time: %{time_total} seconds\n" https://ichochy.com
参数说明
- -o /dev/null:将响应体输出到 /dev/null,即不显示内容。
- -s:静默模式,不显示进度或错误信息。
- -w:格式化输出,包括 HTTP 状态码和请求的总时间。
网站请求测速
测速脚本
完整脚本:speedtest.sh
#! /bin/bash
# 网络访问测试
# 通过CURL命令测试网络访问时间
# author: iChochy
# site: https://ichochy.com
read -p "测速URL(可为空):" url
if [ -z $url ]
then
url="https://ichochy.com"
fi
echo "测速URL:$url"
echo "开始测速…………"
curl -o /dev/null -s -w time_namelookup:"\t"%{time_namelookup}"\n"time_connect:"\t\t"%{time_connect}"\n"time_appconnect:"\t"%{time_appconnect}"\n"time_pretransfer:"\t"%{time_pretransfer}"\n"time_starttransfer:"\t"%{time_starttransfer}"\n"time_total:"\t\t"%{time_total}"\n"time_redirect:"\t\t"%{time_redirect}"\n" $url
echo "循环测速…………"
i=1
while (($i<=5))
do
printf "第"$i"次:"
curl -o /dev/null -s -w time_connect:"\t"%{time_connect}"\t"time_total:"\t"%{time_total}"\n" $url
let i++
done
echo "####################################"
echo "字段说明:"
echo "time_namelookup \t# 从开始计算,域名解析完成的耗时"
echo "time_connect \t\t# 从开始计算,TCP建立完成的耗时"
echo "time_appconnect \t# 从开始计算,应用层握手完成的耗时"
echo "time_pretransfer \t# 从开始计算,准备传输数据的耗时"
echo "time_starttransfer \t# 从开始计算,开始接收数据的耗时"
echo "time_total \t\t# 从开始记算,完成接收数据的耗时"
echo "time_redirect \t\t# 重定向的耗时,没有重定向时间为0"
脚本使用
- 保存脚本为
speedtest.sh
- 在终端中运行脚本
sh ./speediest.sh
- 查看运行结果
mleo@Mac[mleo]: sh ./speediest.sh
测速URL(可为空):
测速URL:https://ichochy.com
开始测速…………
time_namelookup: 0.000695
time_connect: 0.001227
time_appconnect: 0.614623
time_pretransfer: 0.614876
time_starttransfer: 0.968854
time_total: 0.970281
time_redirect: 0.000000
循环测速…………
第1次:time_connect: 0.000799 time_total: 1.136176
第2次:time_connect: 0.001501 time_total: 0.806167
第3次:time_connect: 0.001580 time_total: 0.710288
第4次:time_connect: 0.001136 time_total: 0.612873
第5次:time_connect: 0.000909 time_total: 0.768882
####################################
字段说明:
time_namelookup # 从开始计算,域名解析完成的耗时
time_connect # 从开始计算,TCP建立完成的耗时
time_appconnect # 从开始计算,应用层握手完成的耗时
time_pretransfer # 从开始计算,准备传输数据的耗时
time_starttransfer # 从开始计算,开始接收数据的耗时
time_total # 从开始记算,完成接收数据的耗时
time_redirect # 重定向的耗时,没有重定向时间为0
总结
curl 是一个强大的命令行工具,用于在网络上发送和接收数据,支持多种协议如 HTTP、HTTPS、FTP 等。
它允许用户灵活地执行各种请求,包括 GET、POST 等,并能够自定义请求头和数据。
curl 适合进行 API 测试、文件传输和网络调试,支持身份验证和 SSL/TLS 加密,适用于多种操作系统。
通过简单的命令,用户可以轻松与服务器进行交互并获取详细的请求和响应信息。
打赏
上一篇
下一篇