用了这么多年 curl,竟然不知道还有这种用法?!
The following article is from 云原生实验室 Author 米开朗基杨
我们经常会遇到这样一种场景:某一个服务更换了 IP,或者部署在多个服务器上,或许还使用了 CDN。我只是想临时测试一下某个 IP,如果直接修改 DNS 解析或者修改 CDN 回源地址,可能会影响到用户的访问(万一这个 IP 就是有问题呢?),有没有别的办法可以达成这个目的?
假设我想访问 http://fuckcloudnative.io 这个域名,并且指定解析的 IP 地址为 1.1.1.1。
你可能会觉得这个问题很简单,添加一条 hosts 不就行了嘛:
1.1.1.1 fuckcloudnative.io
OK,这个方法没问题,但你可能需要刷新本地 DNS 缓存,或者需要在浏览器中强制刷新。当你测试完了之后,还得能想起来去删掉这条 hosts。
大多数情况下我们都是用 curl 来测试服务,你可以选择修改 /etc/hosts 来达到目的,但这种方法总归比较麻烦,如果能在 curl 的命令中直接指定域名的 IP 地址,那就更好了。
大部分人熟知的方法是覆盖 Host
HTTP Header:
$ curl -H "Host: fuckcloudnative.io" http://1.1.1.1/
这个方法在很长一段时间里都是百分之百有效的,但如今是 HTTPS
的世界,这种方法在 HTTPS
的世界里会出现各种问题。今天我将告诉大家一个新的参数 --resolve
:
--resolve <host:port:address[,address]...>
Provide a custom address for a specific host and port pair.
Using this, you can make the curl requests(s) use a specified
address and prevent the otherwise normally resolved address to
be used.
利用这个参数,我们可以随心所欲地指定域名解析的 IP,不管是 HTTP 还是 HTTPS。例如:
$ curl http://fuckcloudnative.io/ --resolve fuckcloudnative.io:80:1.1.1.1
$ curl https://fuckcloudnative.io/ --resolve fuckcloudnative.io:443:1.1.1.1
还有更高级的用法,比如使用 *
作为通配符,这样请求中调用的所有 Host 都会转到你指定的 IP:
$ curl https://fuckcloudnative.io/ --resolve *:443:1.1.1.1
是不是很好玩?
听过K8S玩家都关注了它
后台回复◉k8s◉获取史上最方便快捷的 Kubernetes 高可用部署工具
只需一条命令,连 ssh 都不需要!
【往期推荐】
2020-12-06
2020-12-06
2020-12-05
2020-12-05
2020-12-04
2020-12-04
﹀
﹀
﹀
深度内容
推荐加入