get/post/curl/curl_multi_*并发请求

//get/post请求
$opts = array(
     'http'=>array(
          'method'=>"GET",
          'timeout'=>5,//单位秒
     )
);
$opts = array(
  'http'=>array(
    'method'=>"POST",
    'header'=>"Content-type: application/json\r\n",
    'timeout'=>5,//单位秒
    'content'=>json_encode($params)
  )
);
$result = file_get_contents($url,false,stream_context_create($opts));

//curl
$header = array(
    "X-ACL-TOKEN:".$token,
    "Content-type: multipart/form-data;charset=UTF-8"
);
//$params 参数
$url = 'http://';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 5.1; rv:19.0) Gecko/20100101 Firefox/19.0');
curl_setopt($ch, CURLOPT_POST, 1); //post
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($params));
$result = curl_exec($ch);
$result = json_decode($result, true);
curl_close($ch);

//并发请求
ini_set("max_execution_time",0);
ini_set('memory_limit', '1024M');
header('Content-type:text/html;charset=utf-8');
$headers = array(
    'User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.107 Safari/537.36',
);
$arrNew = array_chunk($arr,10);//把数组按10个元素分割,每次并发10条
for ($j=0;$j <count($arrNew);$j++){
    $mh = curl_multi_init();
    foreach ($arrNew[$j] as $key=>$val){
             if($val ){
            $url = 'http://';
            $conn[$key] = curl_init($url);
            curl_setopt($conn[$key],CURLOPT_RETURNTRANSFER,1);
            curl_setopt($conn[$key], CURLOPT_HTTPHEADER,$headers);
            curl_setopt($conn[$key], CURLOPT_HEADER, 0);
            curl_setopt($conn[$key], CURLOPT_TIMEOUT, 20);
            if (strpos($url,'https')){
                curl_setopt ($conn[$key], CURLOPT_SSL_VERIFYPEER, false);
                curl_setopt ($conn[$key], CURLOPT_SSL_VERIFYHOST, 2);
            }
            curl_multi_add_handle($mh,$conn[$key]);
        }
    }
    $active = null;
    //最简单方案
         do {
        curl_multi_exec($mh, $running);
        curl_multi_select($mh);
    } while ($running > 0);
    //获取内容
        foreach ($arrNew[$j] as $key=>$val) {
             if($val ){
            $res[$key]=curl_multi_getcontent($conn[$key]);
            curl_close($conn[$key]);
        }
    }
}
发布了11 篇原创文章 · 获赞 3 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/liuyingsv/article/details/79088293
今日推荐