在PHP中使用curl不会';行不通
我试图在Ubuntu 15.10上使用PHP中的curl获取HTML页面 我的代码如下在PHP中使用curl不会';行不通,php,curl,Php,Curl,我试图在Ubuntu 15.10上使用PHP中的curl获取HTML页面 我的代码如下 <?php ini_set('display_errors', 1); $url = 'http://www.galliera.it/118'; print "The url ... ".$url; echo '<br>'; echo '<br>'; //#Set CURL parameters ... $ch = c
<?php
ini_set('display_errors', 1);
$url = 'http://www.galliera.it/118';
print "The url ... ".$url;
echo '<br>';
echo '<br>';
//#Set CURL parameters ...
$ch = curl_init();
curl_setopt($ch, CURLOPT_AUTOREFERER, TRUE);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
curl_setopt($ch, CURLOPT_PROXY, '');
$data = curl_exec($ch);
curl_close($ch);
print "Data ... ".$data;
echo '<br>';
echo '<br>';
?>
当我执行代码时,我无法显示$data
值,在我的控制台中返回的执行代码为200
有任何帮助/建议/示例吗?您需要使用SSL设置curl 如果CURLOPT_SSL_VERIFYPEER是真的(应该是真的!),您需要使用CURLOPT_CAINFO和CURLOPT_CAPATH()告诉curl在哪里查找 所有使用SSL的浏览器都必须具有不同类型的本地公钥集合,以便它们能够建立对网站安全连接的信任链。此列表需要定期更新,因为证书过期、被替换、受损、不可信任或添加了新的证书。该网站有一个从Mozilla中提取的文件 获得最新副本的推荐方法是定期从该站点下载,但不要太频繁以至于服务器无法承受。每个月一次就足够了 在linux上,您可以使用如下条目:
# update CA cert store every month
0 1 1 * * curl --remote-name --time-cond /path/to/cacert.pem https://curl.haxx.se/ca/cacert.pem
url 302会重定向到https版本,因此它应该是https,并且您保存了网络往返
$url = 'https://www.galliera.it/118';
$ch = curl_init();
$opt = array(
CURLOPT_AUTOREFERER => true,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HEADER => false,
CURLOPT_URL => $url,
CURLOPT_SSL_VERIFYHOST => 2, //match common name in cert
CURLOPT_SSL_VERIFYPEER => true,
CURLOPT_ENCODING => '', //enable gzip
CURLOPT_CAINFO => '/path/to/cacert.pem', //CA cert store !!!
// if you are using linux and have openssl installed:
CURLOPT_CAPATH => '/etc/ssl/certs',
// you only need this when actually using a proxy
// curl_setopt($ch, CURLOPT_PROXY, '');
);
curl_setopt_array($ch, $opt);
$data = curl_exec($ch);
curl_close($ch);
echo $data;
使用CURLOPT_PROXY指定代理ip:port,但是如果你没有使用,就不要在那里使用。无法解析
我执行代码时无法显示$data值,并且在我的控制台中返回了200个ad执行代码。
但是运行了你的代码,它工作得很好。你的IP可能会因为各种原因被阻止。printr(curl_getinfo($ch));打印错误(卷曲错误($ch));当我没有指定CURLOPT_CAINFO时,我成功地再现了错误。url被重定向到https,因此您需要使用ssl,而不是print(),使用print\r($data),因为它告诉您,$data=false;意思是curl在执行你的命令时出现了问题。我尝试使用你的建议,但出现了一些问题。。。所以我尝试重新启动我的Ubuntu虚拟机,现在我的原始代码可以正常工作了…:-)无论如何,你的建议是有用的!