2017-08-10 56 views
0

我試圖在Ubuntu 15.10中使用curl在PHP中使用curl來獲取HTML頁面。在PHP中使用捲曲不起作用

我的代碼是後續..

<?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執行代碼返回。

任何幫助/建議/示例?

+3

無法解析'當我執行我的代碼時,我無法顯示$ data值,並且在我的控制檯中有200個廣告執行代碼返回.'但是運行了您的代碼並且工作正常。 –

+2

由於許多原因,您的IP可能會被阻止。 – rtfm

+0

print_r(curl_getinfo($ ch)); print_r(curl_error($ ch)); –

回答

1

您需要設置捲曲使用SSL

如果CURLOPT_SSL_VERIFYPEER是真實的(並且是應該的!),你需要告訴捲曲到哪裏尋找使用CURLOPT_CAINFO和CURLOPT_CAPATH(documentationcertificates

所有使用SSL的瀏覽器必須具有不同Certificate Authorities的本地公鑰集合,以便他們可以建立對網站安全連接的信任鏈。此列表需要定期更新,因爲證書過期並被替換,變得受到損害,不能被信任或新的被添加。網站https://curl.haxx.se/有一個從Mozilla中提取的cacert.pem文件。

獲取最新副本的推薦方法是定期從該網站下載它,但不會太頻繁地淹沒其服務器。每個月一次就夠了。

在Linux上,你可以使用一個crontab條目是這樣的:

# 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 

的網址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:端口,但如果你不使用一個根本沒有它在那裏。

+0

我試圖使用你的建議,但出現了問題......所以我試着重新啓動我的Ubuntu虛擬機,現在我的原始代碼工作正常...... :-(。你的建議無論如何都是有用的! – Cesare