Php 为什么cURL将无效的IP地址报告为错误?
我有以下使用cURL的PHP代码:Php 为什么cURL将无效的IP地址报告为错误?,php,curl,dns,Php,Curl,Dns,我有以下使用cURL的PHP代码: $ch = curl_init(); curl_setopt($ch,CURLOPT_URL,"http://area51.stackexchange.com/users/flair/31.json"); curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); $a_data = json_decode(curl_exec($ch)); echo curl_error($ch); 然后,当我尝试通过HTTP访问该页面时,出
$ch = curl_init();
curl_setopt($ch,CURLOPT_URL,"http://area51.stackexchange.com/users/flair/31.json");
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
$a_data = json_decode(curl_exec($ch));
echo curl_error($ch);
然后,当我尝试通过HTTP访问该页面时,出现以下错误:
无法连接到0.0.0.31:参数无效
但是,当从命令行运行时,代码工作正常
什么可能导致cURL尝试连接到0.0.0.31,这是AFAIK,甚至不是有效的IP地址?“什么可能导致cURL尝试连接到0.0.0.31,这是AFAIK,甚至不是有效的IP地址?” 你的域名系统搞砸了。我测试了您的代码,它运行正常。当您说“从命令行运行时,代码运行正常”,您的意思是您已经使用PHP CLI解释器运行了它吗?如果是这种情况,您可以检查web服务器上的
php-i
与phpinfo()
的输出之间是否存在任何明显的不匹配。这可能是一些奇怪的版本不匹配或环境问题,尽管你的猜测和我的一样好
如果您(正如我最初所想)只是在谈论运行
curl
命令,那么您也可以尝试在那里检查版本号或环境变量。我也遇到了同样的问题
我认为您可能会这样构造url:
$url = "http://area51.stackexchange.com/users/flair/" + 31 + ".json";
由于某种原因,url被转换为0.0.0.31
相反,尝试将字符串浓缩,如下所示:
$url = "http://area51.stackexchange.com/users/flair/" . 31 . ".json";
至少解决了我的问题 我假设您已检查DNS解析是否正常工作。cURL是否可以从命令行正常工作?@Tim:yes。从同一服务器的命令行可以正常工作。Hmm。很奇怪。请参阅下面我的问题/建议。您在哪里测试代码?在工作?也许代理服务器@work拒绝访问未知主机?否则你的dns我猜是错的(可能被黑客攻击了!!)。尝试刷新dns缓存??可能是因为有人错误地将URL中的
/
字符解释为
,从而将URL转换为0.0.0.31
?两者都以31
结尾这一事实令人好奇。我以前从未见过这样的事情发生,不过。。。