惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Google DeepMind News
Google DeepMind News
I
InfoQ
Engineering at Meta
Engineering at Meta
D
DataBreaches.Net
L
LangChain Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Recent Announcements
Recent Announcements
GbyAI
GbyAI
爱范儿
爱范儿
Microsoft Security Blog
Microsoft Security Blog
腾讯CDC
美团技术团队
罗磊的独立博客
Microsoft Azure Blog
Microsoft Azure Blog
WordPress大学
WordPress大学
T
The Blog of Author Tim Ferriss
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
雷峰网
雷峰网
M
MIT News - Artificial intelligence
D
Docker
MongoDB | Blog
MongoDB | Blog
F
Fortinet All Blogs
博客园 - 叶小钗

回忆中的明天

自己写一个Web 端的MiMo TTS Chat,方便实现文本转语音,API限免中 · 回忆中的明天 NVIDIA NIM 开发平台,提供超多免费大模型 · 回忆中的明天 iTranslation 简单快捷的翻译软件,支持数十种语言互译 · 回忆中的明天 国内外免费大模型平台,支持 API 调用的超多免费大模型 · 回忆中的明天 SiliconFlow 硅基流动一站式大模型云服务平台,提供超多免费大模型 · 回忆中的明天 Xiaomi MiMo 小米大模型团队开发的大语言模型,开源限免中…… · 回忆中的明天 BigModel 智谱大模型开放平台,提供超多自研免费大模型 · 回忆中的明天 OpenRouter 模型聚合平台,提供超多免费模型使用 · 回忆中的明天 iReader 英语点读学习系统,译林小学英语在线点读 · 回忆中的明天 ZenMux 企业级大模型聚合平台,提供免费试用模型 Gemini 3 Pro · 回忆中的明天 英语学习,新概念英语在线点读、全文朗读学习系统 · 回忆中的明天 iGSTT(Gemini STT) 开源免费的语音转文本(STT)的命令行工具 · 回忆中的明天 Python 项目打包,并上传到 PyPI,分享项目 · 回忆中的明天 iGTTS(Gemini TTS) 开源免费的文本转语音(TTS)的命令行工具 · 回忆中的明天 iChat(AI Chat) 智能聊天工具,支持 MiMo、DeepSeek、Gemini、Grok、OpenAI和自定义AI · 回忆中的明天 NanoPi R2S 安装 Debian 固件系统,旁路由网络代理内网转发,决解直连网络卡顿 nftables · 回忆中的明天 NanoPi R2S Armbian Linux 旁路由网络代理内网转发,决解直连网络卡顿 iptables · 回忆中的明天 sing-box rule-set · 回忆中的明天 Xcode 最全最实用的快捷键列表 · 回忆中的明天 SwiftUI 中的@State、@Bindable和@Binding · 回忆中的明天 免费的图床服务器-GitHub Pages · 回忆中的明天 A Free Native Image Uploading Tool for macOS · 回忆中的明天 免费的图床服务器-Cloudflare-R2 · 回忆中的明天 图传 (iUploader) - macOS 免费原生图床上传利器 · 回忆中的明天 本地无法加载托管到Cloudflare中的图片等资源,权限错误403 · 回忆中的明天 国内、外免费公共的DNS,支持的DoH,防止污染、篡改的问题 · 回忆中的明天 macOS 系统下载和安装 · 回忆中的明天 WARP Beta for macOS 支持新协议 MASQUE · 回忆中的明天 2024年自用国外靠谱的 VPS 服务器推荐 · 回忆中的明天 使用 OpenCore,让你的旧 Mac 用上最新的 macOS 系统 · 回忆中的明天
使用 CURL 命令调试和诊断网络问题,网站请求测速 · 回忆中的...
2024-10-01 · via 回忆中的明天

原文:https://ichochy.com/posts/shell/20241001.html


curl 是一个命令行工具,用于在网络上发送和接收数据。它支持多种协议,包括 HTTP、HTTPS、FTP、SFTP 等,广泛应用于 Web 开发、API 测试和网络调试。

使用场景

  • API 测试:可以用于测试 RESTful API 的请求和响应。
  • 文件传输:适合进行文件的下载和上传操作。
  • 网络调试:用于调试和诊断网络问题,查看请求和响应的详细信息。
  • 自动化脚本:可以在脚本中使用,以自动化与服务器的交互。

执行过程:

  • 创建请求: 使用 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 加密,适用于多种操作系统。
通过简单的命令,用户可以轻松与服务器进行交互并获取详细的请求和响应信息。