2017-08-06 7 views
1

私はマルチカール行うこと、機能を持っている:私は理論的には、要求の多くを行うことができます。このように約500件以上のリクエストを送信すると、マルチカールが空のオブジェクトを返すのはなぜですか?

//$ID = array of identificators 
function getLotInfo($ID) 
{ 
    $info = array(); 

    $multi = curl_multi_init(); 
    $channels = array(); 

    foreach ($ID as $id) { 
     $ch = curl_init(); 
     curl_setopt($ch, CURLOPT_URL, "https://skylots.org/lot/$id"); 
     curl_setopt($ch, CURLOPT_HEADER, 0); 
     curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
     curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 
     curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30); 
     curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
     curl_setopt($ch, CURLOPT_COOKIEJAR, dirname(__FILE__) . '/cookies/cookie.txt'); 
     curl_setopt($ch, CURLOPT_COOKIEFILE, dirname(__FILE__) . '/cookies/cookie.txt'); 

     curl_multi_add_handle($multi, $ch); 

     $channels[$id] = $ch; 
    } 

    $active = null; 
    do { 
     $mrc = curl_multi_exec($multi, $active); 
    } while ($mrc == CURLM_CALL_MULTI_PERFORM); 

    while ($active && $mrc == CURLM_OK) { 
     if (curl_multi_select($multi) == -1) { 
      continue; 
     } 

     do { 
      $mrc = curl_multi_exec($multi, $active); 
     } while ($mrc == CURLM_CALL_MULTI_PERFORM); 
    } 

    $datas = array(); 
    foreach ($channels as $channel) { 
     $datas[] = curl_multi_getcontent($channel); 
     curl_multi_remove_handle($multi, $channel); 
    } 

    curl_multi_close($multi); 
}  

を、しかしidentificatorsの数が約500、より、 enter image description here

ときなぜこの邪魔になるのですか?どうすれば修正できますか?

答えて

0

多分それは外部のサイトポリシーのためです。彼らは1つのIPからの多くの要求を許可しません。実際にはファイアウォールがあなたの要求を拒否します

+0

しかし、500件を超えるリクエストの後にリクエストを減らすと、私はコンテンツを取得します。したがって、私はこれがファイアウォールではないと思うが、間違っている可能性がある。 この関数は、1回の繰り返しで<500リクエストのサイクルのように動作させることができますが、それは正しくなりますか? –

+0

@ S.Vladimirはおそらくサーバーリソースのためです。彼らはそのような多くの要求を処理することはできません。 – Beaumind

関連する問題