我将curl 与Socks 代理一起使用。代理是通过配置的ANY_PROXY="socks5://NNN.NNN.NNN.NNN.PPPP"
我观察到curl 在本地解析主机名,而不是通过代理。当请求带有 IP 的 URL 时,请求工作正常,但主机名无法在本地解析,curl 失败。
在手册页中我发现了这个显式 CLI 选项:
--socks5-hostname <host[:port]> Use the specified SOCKS5 proxy (and let the proxy resolve the host name).
有趣的是,括号内的文本强调,该选项还将通过代理解析主机名。但这都是关于主机名解析的,在手册页的其余部分中,没有任何文字提及名称解析如何与代理一起工作。
版本:curl 7.27.0 (x86_64-redhat-linux-gnu) libcurl/7.27.0 NSS/3.15.1 zlib/1.2.7 libidn/1.26 libssh2/1.4.3
是否有一个选项或替代环境变量可以使curl通过代理解析主机名而无需指定--socks5-hostname <host:port>
?
答案1
对于像我这样的白痴来说,好吧,这是微妙的部分:
从 7.21.7 开始,此选项是多余的,因为您可以使用协议前缀通过 指定袜子5 主机名
-x
代理。--proxy
socks5h://
h
接下来的一小部分socks5
告诉curl也通过代理查找主机名。
制作卷曲通过代理查找主机名必须导出:
ALL_PROXY="socks5h://NNN.NNN.NNN.NNN.PPPP"
与代理相比本地查找:
ALL_PROXY="socks5://NNN.NNN.NNN.NNN.PPPP"