Curl 具有手动指定将主机解析到哪个 IP 的功能。例如:
curl https://www.google.com --resolve "www.google.com:443:173.194.72.112"
这在使用 HTTPS 时特别有用。如果只是一个 HTTP 请求,我可以通过直接指定 IP 地址并添加主机标头来实现相同的效果。但在 HTTPS 中,这会中断连接,因为 SSL 证书主机将与 IP 地址进行比较,而不是与主机标头进行比较。
我的问题是,如何在 PHP 中做同样的事情?
尽管 @deceze 的答案是正确的,但一个活生生的例子可能会有用。我需要CURLOPT_RESOLVE
因为我试图使用附加的 IP 地址直接连接Host: www.example.com
header,但由于服务器使用 SNI,所以这不起作用。
I used CURLOPT_RESOLVE
解决我的问题。此代码允许我通过我选择的 IP 地址连接到 SNI 服务器:
$resolve = array(sprintf(
"%s:%d:%s",
$hostname,
$port,
$host_ip
));
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RESOLVE, $resolve);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($ch);
curl_close($ch);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)