在PHP中获得阻止curl请求的价值

时间:2019-07-17 16:08:51

标签: php loops curl

我在一个循环中有多个curl请求。如何获得响应?

for($i = 1; $i <= 10; $i++) {
     $ch = curl_init();
     curl_setopt($ch,CURLOPT_URL,"http://www.example.com");

     if(curl_exec($ch)===false){ 
       break;
     }
 }

1 个答案:

答案 0 :(得分:1)

让我们以一个示例为例,假设服务器将在单个请求中返回单个 id 的数据,则需要基于id从服务器获取记录。

现在,如果我们使用cURL,则需要为每个 id 迭代循环并请求服务器,因此,如果有 10 个ID,则平均响应时间将为< 单个请求的strong> 10X 。

$result=array();
foreach ($ids as $id) {
  // URL from which data will be fetched
  $fetchURL = 'https://webkul.com&customerId='.$id;
  $ch = curl_init();
  curl_setopt($ch, CURLOPT_URL, $fetchURL);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  $result[] = curl_exec($ch);
  curl_close($ch);
}

但是,如果使用多个 cURL请求,则响应时间将大大减少。为此,您需要首先初始化curl_multi_init(),使用for()将所有请求推送到数组,最后将请求发送到curl_multi_exec()

// array of curl handles
$multiCurl = array();
// data to be returned
$result = array();
// multi handle
$mh = curl_multi_init();
foreach ($ids as $i => $id) {
  // URL from which data will be fetched
  $fetchURL = 'https://webkul.com&customerId='.$id;
  $multiCurl[$i] = curl_init();
  curl_setopt($multiCurl[$i], CURLOPT_URL,$fetchURL);
  curl_setopt($multiCurl[$i], CURLOPT_HEADER,0);
  curl_setopt($multiCurl[$i], CURLOPT_RETURNTRANSFER,1);
  curl_multi_add_handle($mh, $multiCurl[$i]);
}
$index=null;
do {
  curl_multi_exec($mh,$index);
} while($index > 0);
// get content and remove handles
foreach($multiCurl as $k => $ch) {
  $result[$k] = curl_multi_getcontent($ch);
  curl_multi_remove_handle($mh, $ch);
}
// close
curl_multi_close($mh);

完整参考: https://webkul.com/blog/simultaneous-curl-requests-in-php/