使用curl --resolve与http代理

13

curl 实用程序中有一个 --resolve 选项,允许您添加 DNS 条目并在调用主机时强制使用特定的 IP 地址。

从版本7.21.3开始,cURL 允许指定 IP 地址,从而伪造请求的主机名。

$ curl --resolve www.example.com:80:127.0.0.1 http://www.example.com/

--resolve 开关允许您告诉 curl 在解析给定主机名时要请求哪个地址。在上面的代码片段中,cURL 使用 127.0.0.1(本地主机)代替通过 DNS 解析 www.example.com 而得到的地址。

当不带 http 代理使用此选项时,它可以正常工作,并且 DNS 条目可以在缓存中找到。

问题是我想同时使用此选项和 curl 的 --proxy 参数。当设置后者时,调用同一主机时无法找到 DNS 条目。

$ curl --proxy 1.2.3.4:80 --resolve www.example.com:80:127.0.0.1 http://www.example.com/

有什么办法可以解决这个问题吗?

我有一个想法,代理正在使用自己的DNS缓存,我们无法更改它,但也许我是错的?


2
为什么不直接使用 $ curl --proxy 1.2.3.4:80 127.0.0.1 呢? - T33C
11
无法在一个curl命令中尝试同时执行这两个操作。无论你使用什么HTTP代理,它都需要为主机进行自己的DNS解析。它无法知道你在命令中指定了“--resolve”。你需要调整正在使用的代理的DNS设置。 - mrcheshire
1
这正是我所想的。似乎唯一的方法是通过代理调用127.0.0.1,并设置http Host头。谢谢。 - YoyoS
1个回答

0
如果您可以访问它,您还可以修改代理服务器中的/etc/hosts。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接