当前位置 博文首页 > multi_*并发请求_那片天空:get/post/curl/curl

    multi_*并发请求_那片天空:get/post/curl/curl

    作者:[db:作者] 时间:2021-08-30 19:40

    //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]);
            }
        }
    }
    
    cs
    下一篇:没有了