用了这么多年 curl,竟然不知道还有这种用法?!
共 1454字,需浏览 3分钟
·
2020-12-08 11:44
更多奇技淫巧欢迎订阅博客:https://fuckcloudnative.io
我们经常会遇到这样一种场景:某一个服务更换了 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
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◉获取史上最方便快捷的 Kubernetes 高可用部署工具,只需一条命令,连 ssh 都不需要!
点击 "阅读原文" 获取更好的阅读体验!
❤️给个「在看」,是对我最大的支持❤️