2

ウェブサイトのホームページを開いて、phpでcurlを使用してhtmlマークアップからタイトルと説明を抽出しようとしています。これはある程度成功していますが、多くのウェブサイトを開くことができません。私のコードはここにあります:

function curl_download($Url){
     if (!function_exists('curl_init')){
        die('Sorry cURL is not installed!');
    }
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $Url); 
    curl_setopt($ch, CURLOPT_HEADER, 1);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($ch, CURLOPT_TIMEOUT, 10);
    $output = curl_exec($ch);
    curl_close($ch); 
    return $output;
}
// $url is any url
$source=curl_download($url);
$d=new DOMDocument();
$d->loadHTML($source);
$title=$d->getElementsByTagName("title")->item(0)->textContent)
$domx = new DOMXPath($d);
$desc=$domx->query("//meta[@name='description']")->item(0);
$description=$desc->getAttribute('content');
?>

このコードはほとんどのWebサイトで正常に機能していますが、開くことさえできない人もたくさんいます。理由は何ですか?

関数を使用してこれらのWebサイトのヘッダーを取得しようとすると、正常に機能しget_headersますが、curlを使用してこれらのWebサイトを開くことができません。これらのWebサイトのうちの2つはとblogger.comですlive.com

4

1 に答える 1

3

交換:

$output = curl_exec($ch);

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); 
curl_setopt($ch, CURLOPT_SSLVERSION, 3);
$output = curl_exec($ch);
if (!$output) {
   echo curl_error($ch);
}

Curlが失敗する理由を確認してください。

関数呼び出しの結果を常にチェックして、成功したかどうかを確認し、失敗した場合はレポートすることをお勧めします。関数は99.999%の確率で機能する可能性がありますが、失敗した回数とその理由を報告する必要があります。そうすれば、可能であれば根本的な原因を特定して修正できます。

于 2012-07-21T20:54:35.633 に答える