curl 同時發送多個請求


 

// 創建一對cURL資源
$ch1 = curl_init();
$ch2 = curl_init();

// 設置URL和相應的選項
curl_setopt($ch1, CURLOPT_URL, "http://test.cm/a.php/");
curl_setopt($ch1, CURLOPT_HEADER, 0);
curl_setopt ( $ch1, CURLOPT_RETURNTRANSFER, 1 );

curl_setopt($ch2, CURLOPT_URL, "http://testd.cm/b.php");

curl_setopt($ch2, CURLOPT_HEADER, 0);
curl_setopt ( $ch2, CURLOPT_RETURNTRANSFER, 1 );

// 創建批處理cURL句柄
$mh = curl_multi_init();

// 增加2個句柄
curl_multi_add_handle($mh,$ch1);
curl_multi_add_handle($mh,$ch2);

$running=null;
// 執行批處理句柄
do {
    //處理所有的請求,知道全部執行完畢
    curl_multi_exec($mh,$running);
} while($running > 0);

//根據句柄獲取每個請求對應的返回的內容
$a = curl_multi_getcontent($ch1);
ee($a);
ee(curl_error($ch1)); //單個請求出錯,不會影響到其他請求

$b = curl_multi_getcontent($ch2);
ee($b);

// 關閉全部句柄
curl_multi_remove_handle($mh, $ch1);
curl_multi_remove_handle($mh, $ch2);
curl_multi_close($mh);

 

curl_multi_info_read, 邊讀邊取

// 創建一對cURL資源
$ch1 = curl_init();
$ch2 = curl_init();

// 設置URL和相應的選項
curl_setopt($ch1, CURLOPT_URL, "http://test.cm/a.php/");
curl_setopt($ch1, CURLOPT_HEADER, 0);
curl_setopt ( $ch1, CURLOPT_RETURNTRANSFER, 1 );

curl_setopt($ch2, CURLOPT_URL, "http://test.cm/b.php");

curl_setopt($ch2, CURLOPT_HEADER, 0);
curl_setopt ( $ch2, CURLOPT_RETURNTRANSFER, 1 );

// 創建批處理cURL句柄
$mh = curl_multi_init();

// 增加2個句柄
curl_multi_add_handle($mh,$ch1);
curl_multi_add_handle($mh,$ch2);

$running=null;
$msgs_in_queue = null;
// 執行批處理句柄
do {
    //處理所有的請求,知道全部執行完畢 , 循環執行
    $status = curl_multi_exec($mh,$running);
     $info = curl_multi_info_read($mh, $msgs_in_queue);
    if (false !== $info)
     {
          eee($msgs_in_queue);
        eee($info); //如果不為空則說明有返回結果
        eee(curl_multi_getcontent($info['handle']));
    }
    
} while($status === CURLM_CALL_MULTI_PERFORM  || $running > 0);

// 關閉全部句柄
curl_multi_remove_handle($mh, $ch1);
curl_multi_remove_handle($mh, $ch2);
curl_multi_close($mh);

 

curl_multi_select,阻塞直到cURL批處理連接中有活動連接(todo ?)

// 創建一對cURL資源
$ch1 = curl_init();
$ch2 = curl_init();

// 設置URL和相應的選項
curl_setopt($ch1, CURLOPT_URL, "http://test.cm/a.php/");
curl_setopt($ch1, CURLOPT_HEADER, 0);
curl_setopt ( $ch1, CURLOPT_RETURNTRANSFER, 1 );

curl_setopt($ch2, CURLOPT_URL, "http://test.cm/b.php");

curl_setopt($ch2, CURLOPT_HEADER, 0);
curl_setopt ( $ch2, CURLOPT_RETURNTRANSFER, 1 );

// 創建批處理cURL句柄
$mh = curl_multi_init();

// 增加2個句柄
curl_multi_add_handle($mh,$ch1);
curl_multi_add_handle($mh,$ch2);

// 執行批處理句柄
$running=null;
 do {
     curl_multi_exec($mh,$running);
     $ready=curl_multi_select($mh); // this will pause the loop
     if($ready>0){
         while($info=curl_multi_info_read($mh)){
             $status=curl_getinfo($info['handle'],CURLINFO_HTTP_CODE);
             if($status==200){
                 $successUrl=curl_getinfo($info['handle'],CURLINFO_EFFECTIVE_URL);
                 echo($successUrl);
                 print_r(curl_multi_getcontent($info['handle']));
             }
         }
     }
 } while ($running>0 && $ready!=-1);
 
// 關閉全部句柄
curl_multi_remove_handle($mh, $ch1);
curl_multi_remove_handle($mh, $ch2);
curl_multi_close($mh);

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM