PHP利用curl批量发送请求

function postMulti($nodes,$timeOut = 5)
{
    try
    {
        if (false == is_array($nodes))
        {
            return array();
        }

        $mh = curl_multi_init();
        $curlArray = array();
        foreach($nodes as $key => $info)
        {
            if(false == is_array($info))
            {
                continue;
            }
            if(false == isset($info['url']))
            {
                continue;
            }

            $ch = curl_init();
            // 设置url
            $url = $info['url'];
            curl_setopt($ch, CURLOPT_URL, $url);

            $data = isset($info['data']) ? $info['data'] :null;
            if(false == empty($data))
            {
                curl_setopt($ch, CURLOPT_POST, 1);
                // array
                if (is_array($data) && count($data) > 0)
                {
                    curl_setopt($ch, CURLOPT_POST, count($data));
                }
                curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
            }

            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
            curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
            // 如果成功只将结果返回,不自动输出返回的内容
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
            // user-agent
            curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.2; WOW64; rv:22.0) Gecko/20100101 Firefox/22.0");
            // 超时
            curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeOut);

            $curlArray[$key] = $ch;
            curl_multi_add_handle($mh, $curlArray[$key]);
        }

        $running = NULL;
        do {
            usleep(10000);
            curl_multi_exec($mh,$running);
        } while($running > 0);

        $res = array();
        foreach($nodes as $key => $info)
        {
            $res[$key] = curl_multi_getcontent($curlArray[$key]);
        }
        foreach($nodes as $key => $info){
            curl_multi_remove_handle($mh, $curlArray[$key]);
        }
        curl_multi_close($mh);
        return $res;
    }
    catch ( Exception $e )
    {
        return array();
    }

    return array();
}
$urls = array(
    0=>array(
        'url'=>'http://www.aaa.com/1.php',
        'data'=>array(
            'dopost'    =>  'test'
        )
    ),
    1=>array(
        'url'=>'http://www.bbb.com/2.php',
        'data'=>array(
            'dopost'    =>  'test'
        )
 ),
);
postMulti($urls);
echo 'finish'.date('Y-m-d H:i:s');
die;

 

参考:http://blog.csdn.net/clevercode/article/details/51548210

发表评论

邮箱地址不会被公开。 必填项已用*标注