Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在PHP中使用curl不会';行不通_Php_Curl - Fatal编程技术网

在PHP中使用curl不会';行不通

在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

我试图在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 = 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虚拟机,现在我的原始代码可以正常工作了…:-)无论如何,你的建议是有用的!