我试图从http://ipv6.test-ipv6.com
获取数据,该数据只有AAAA IPv6记录(没有IPv4)。我可以从命令行获取数据,如curl -v http://ipv6.test-ipv6.com
(表明IP已正确解析)。我也试过dig AAAA ipv6.test-ipv6.com @127.0.0.1
并且它正常工作,以及在PHP curl调用中指定IP时获取数据:$ch = curl_init('http://[2001:470:1:18::119]');
。但是专门使用仅IPv6主机名失败。我该如何解决这个问题?
代码:
<?php
$ch = curl_init('http://ipv6.test-ipv6.com');
//$ch = curl_init('http://[2001:470:1:18::119]');
curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_VERSION_IPV6);
curl_setopt($ch, CURLOPT_VERBOSE, true);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_exec($ch);
实际上从它的外观来看,问题在于CURLOPT_IPRESOLVE
选项 - 它没有该选项。我想要实现的是让curl使用IPv6地址或者如果它不可用则失败。不是CURLOPT_IPRESOLVE
应该做什么吗?
答案 0 :(得分:4)
您对CURLOPT_IPRESOLVE
的期望是正确的,这确实是应该做的。但是,您似乎使用了错误的常量值。从手册:
CURLOPT_IPRESOLVE :允许应用程序选择何种IP 解析主机名时使用的地址。这很有趣 使用主机名时使用多个解析地址 IP版本,可能的值为 CURL_IPRESOLVE_WHATEVER , CURL_IPRESOLVE_V4 , CURL_IPRESOLVE_V6 ,默认情况下 的 CURL_IPRESOLVE_WHATEVER 强>
我无法在手册中找到您使用的常量(CURL_VERSION_IPV6
),因此IIRC然后PHP将其解释为字符串"CURL_VERSION_IPV6"
,这将无效。