用了这么多年 curl,竟然不知道还有这种用法?!

云原生实验室

共 1454字,需浏览 3分钟

 · 2020-12-08


更多奇技淫巧欢迎订阅博客: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

是不是很好玩?


你可能还喜欢

点击下方图片即可阅读

Docker 限速不用怕,因为我有 Grafana

云原生是一种信仰 ?



码关注公众号

后台回复◉k8s◉获取史上最方便快捷的 Kubernetes 高可用部署工具,只需一条命令,连 ssh 都不需要!



点击 "阅读原文" 获取更好的阅读体验!

❤️给个「在看」,是对我最大的支持❤️
浏览 57
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报