PHP curl无法解析仅IPv6的URL

时间:2014-08-14 13:50:18

标签: php curl ipv6

我试图从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应该做什么吗?

1 个答案:

答案 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",这将无效。