我有这个简单的PHP脚本:
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://www.instagram.com/zuck/');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec($ch);
curl_close($ch);
echo htmlspecialchars($output);
我有Apache 2.4.17,PHP:5.6.16(我也试过PHP 7)
我已经尝试在远程主机服务器上运行它,它按预期工作。但是它在我的电脑上根本不起作用。
我试过WAMP,XAMPP,禁用防火墙,直接连接到我的调制解调器(没有路由器),检查了php.ini并且c_url未通过。我还尝试从http://www.anindya.com/下载修复程序。也不行。当我尝试curl_version
它有效(所以我猜c_url已加载),但这个脚本没有。奇怪的是,只有空白页面没有错误。
我真的没有更多的故障排除想法
答案 0 :(得分:2)
经过一些测试后我发现了问题:
首先,我在脚本本身检查了错误:
echo curl_error($ch)
返回了这个:
SSL certificate problem: unable to get local issuer certificate
原来我必须禁用SSL证书验证,因为我尝试过的所有网站都使用SSL(例如Instagram,谷歌等)
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false)
答案 1 :(得分:1)
这个问题被标记为已回答,但对于那些将来看到此问题的人来说,@ amphetamachine的评论非常重要。将CURLOPT_SSL_VERIFYPEER设置为false不是一个好主意。它可以在你的本地服务器上运行,但你真的想在远程服务器上使用它吗?
我建议您在php.ini文件中添加证书颁发机构文件的绝对路径(您已经取消注释的位置),而不必记住将此行注释掉以用于生产(或使其以环境为条件) cURL扩展名。)
curl.cainfo ="your absolute local path\cacert.pem"
如果您没有此文件,则可以是downloaded。
这样您的本地测试系统就可以工作,您不会损害您的生产设置。
您可以在cURL选项CURLOPT_CAPATH中设置路径,但在生产代码中也不会想要这样。