PHP CURL 多线程操与同步请求作代码实例

该博客展示了如何在PHP中利用curl_multi_init函数进行并行处理,模拟多线程操作。通过创建多个cURL句柄并将其添加到multi handle中,实现了批量请求的高效执行。在提供的代码示例中,创建了一个循环,用于向指定URL发送1000个带有不同数据的POST请求,并展示了同步与异步方法的区别。
摘要由CSDN通过智能技术生成

php中可以使用curl_multi_init()等来模仿并行处理和多线程程序功能。同时可以使用curl_multi_init()模仿多线程的提交。如下面程序所示:

    public function moreSend(Request $request)
    {
        $stime = microtime(true);
        $url = 'http://php9.com/index/Test/sendPush';
        $handle = curl_multi_init();
        $curls = array();
        for ($x = 0; $x <= 1000; $x++) {
            $data = ['name' => 'liyi-' . $x];
            $encryptData = http_build_query($data);
            $curls[$x] = $this->add_handle($handle, $url, $encryptData);
        }

        $this->exec_handle($handle);
        foreach ($curls as $k => $v) {
            curl_multi_getcontent($curls[$k]);
            curl_multi_remove_handle($handle, $curls[$k]);
        }
        curl_multi_close($handle);

        echo "<pre>";
        print_r($url);
        $etime = microtime(true);//获取程序执行结束的时间
        $total = $etime - $stime;   //计算差值
        $str_total = var_export($total, TRUE);
        echo $str_total;
    }


    private function add_handle($handle, $url, $data)
    {
        $curl = curl_init();
        curl_setopt($curl, CURLOPT_URL, $url);
        curl_setopt($curl, CURLOPT_HEADER, 1);

        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
        //发送什么数据呢
        curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
        curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type: application/x-www-form-urlencoded;'));
        //忽略证书
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
        curl_multi_add_handle($handle, $curl);
        return $curl;
    }

    private function exec_handle($handle)
    {
        $flag = null;
        do {
            curl_multi_exec($handle, $flag);
        } while ($flag > 0);
    }

同步方法


    public function curlSend($url, $data)
    {
        //初使化init方法
        $ch = curl_init();
        $url = 'http://192.168.1.1:7171/' . $url;
//        $url = 'http://bank.com/' . $url;

        //指定URL
        curl_setopt($ch, CURLOPT_URL, $url);
        //设定请求后返回结果
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        //声明使用POST方式来进行发送s
        curl_setopt($ch, CURLOPT_POST, 1);
        //发送什么数据呢
        curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
        curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/x-www-form-urlencoded;'));
        //忽略证书
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);

        //忽略header头信息
        curl_setopt($ch, CURLOPT_HEADER, 0);

        //设置超时时间
        curl_setopt($ch, CURLOPT_TIMEOUT, 30);
        //发送请求
        $output = curl_exec($ch);
        //关闭curl
        curl_close($ch);
        var_dump($output);
        return (array)json_decode($output);

    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值