curl --resolve

curl --resolve 是一个用于在发起 HTTP 请求时,临时修改域名解析的选项。它允许你指定某个域名解析到某个特定的 IP 地址,而不使用系统默认的 DNS 解析结果。这个选项在测试、调试或者绕过某些 DNS 问题时非常有用。

基本语法:

curl --resolve <host:port:address> <URL>

host:port:address:指定要修改解析的域名、端口和对应的 IP 地址。
URL:请求的目标 URL。

作用:
当你使用 curl --resolve 时,curl 会忽略系统 DNS 设置,而是使用你指定的 IP 地址来访问指定的域名和端口。
这个选项对于测试网站的不同服务器(比如测试负载均衡后的某台特定服务器)、绕过本地 hosts 文件、或者在没有修改 DNS 的情况下访问还在开发中的服务器(比如通过 IP 访问但需要域名访问的网站)特别有用。

示例:
假设你想测试域名 example.com 在 80 端口上运行在 IP 地址 93.184.216.34 上的服务,你可以这样使用:

curl --resolve example.com:80:93.184.216.34 http://example.com

这样,curl 会向 93.184.216.34 的 80 端口发送 HTTP 请求,并且在请求头中仍然使用 Host: example.com,就像正常访问该域名一样。

注意:

端口必须指定:即使你使用默认端口(如 HTTP 的 80 或 HTTPS 的 443),也必须明确指定端口号。

支持多个–resolve:你可以在一个 curl 命令中使用多个 --resolve 选项来指定多个域名或端口的解析。

HTTPS 请求:对于 HTTPS 请求,同样适用,但注意 curl 会验证 SSL 证书中的域名是否与请求的域名匹配。由于你指定了正确的域名,所以证书验证应该正常进行(除非你使用了自签名证书或需要跳过验证,这时你可能需要添加 -k 或 --insecure 选项)。

curl --resolve example.com:443:93.184.216.34 https://example.com

IPv6 地址:如果你要指定 IPv6 地址,需要用方括号括起来,例如:

curl --resolve example.com:80:[2001:db8::1] http://example.com

使用场景举例:
测试新服务器:在 DNS 记录更新之前,测试新部署的服务器。
绕过本地 hosts 文件:当本地 hosts 文件将域名解析到另一个 IP 时,临时使用指定 IP 访问。
调试负载均衡:指定访问负载均衡后面的某台特定服务器。
避免 DNS 缓存问题:当 DNS 缓存尚未更新时,直接指定正确的 IP 地址。

指定cdn域名测带宽

for i in {1..4}; do curl -s -w "%{speed_download}\n" -o /dev/null --resolve example.com:80:[2001:db8::1] http://example.com ; done | awk '{sum+=$1} END {printf "Average Speed: %.2f MB/s\n", sum/NR/1024/1024}'

for i in {1…4}; do curl -s -w “%{speed_download}\n” -o /dev/null --resolve example.com:80:[2001:db8::1] http://example.com ; done | awk ‘{sum+=$1} END {printf “Average Speed: %.2f MB/s\n”, sum/NR/1024/1024}’

你可能感兴趣的:(curl)