2016-05-23 21 views
0

PHPでCURLを使用しようとしているページからデータをスクラップしようとしています。PHP Curlリダイレクト待ちページに接続

サイトに負荷がかかりすぎて、「ちょっと待ってください...リクエストが処理されています...」というメッセージが表示され、サーバーが使用可能になるまで5秒ごとにメタリフレッシュが行われます。これは複数のリフレッシュである可能性があります。

私はそれが複数回更新されますので、これは助けない

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 

を追加しようとしています。

リフレッシュがなくなるか、何らかの理由で次のページに到達するまで待つ方法はありますか?

カールスクリプトがまま現在

$ch = curl_init(); 
    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 
    $data = curl_exec($ch); 
    curl_close($ch); 

任意のヘルプは高く評価されています。 これをカールで行うことができない場合は、別の方法をお勧めしますか?

+0

メタリフレッシュを投稿してください。 –

+0

これは、要求を繰り返すことによってのみ実行できます。接続しているサービスが繰り返し要求に同意していることを確認してください。あなたはすべての後に重い負荷に貢献している – sba

+0

はい彼らは掻きすることができます。 – md123

答えて

0

あなたのような何か試すことができます:上記html 5のための時間を解析しようと含まれていないhtml UTIL、再試行の間秒を待ちます

<?php 
    $data= "" ; 
    $retries = 0; 
    while(preg_match('/<meta http-equiv="refresh"/im', $data) or $retries < 5){ 
     $ch = curl_init(); 
     curl_setopt($ch, CURLOPT_URL, $url); 
     curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
     curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 
     $data = curl_exec($ch); 
     curl_close($ch); 
     if(!preg_match('/<meta http-equiv="refresh"/im', $data)) 
     { 
      break; 
     } 
     $retries++; 
     sleep(2); 
    } 
?> 

<meta http-equiv="refresh

+0

これはリクエストを再送信するだけです。サーバーの負荷に追加します。私はそれが単一の接続にとどまることを望みます。 – md123

+0

あなたはそれをすることはできません。 –

関連する問題