查看原文
其他

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

程序猿DD 2021-05-26

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 都不需要!

【往期推荐】

将 Docker 踢出群聊后,Kubernetes 还能否欢快地蹦跶吗?

2020-12-06

Redis面试突击专用

2020-12-06

殊途同归!招聘软件与社交软件最终都要走向约P宿命?

2020-12-05

Spring-Retry重试实现原理

2020-12-05

今年最后一月数据库排名公布!前三难以撼动!

2020-12-04

8 种常见的SQL错误用法

2020-12-04


深度内容

推荐加入




    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存