php 使用curl同时发起post多发请求

    /**
     * https 发起post多发请求
     * @param array $nodes url和参数信息。
     * $nodes = [
     * [0] = > [
     * 'url' => 'http://www.baidu.com',
     * 'data' => '{"a":1,"b":2}'
     * ],
     * [1] = > [
     * 'url' => 'http://www.baidu.com',
     * 'data' => null
     * ]
     * ....
     * ];
     * @param int $timeOut 超时设置
     * @return array
     */
    public static 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;
                }

                $headers[] =  "cache-control: no-cache";
                $contentType = [
                    'form-data' => 'Content-Type: multipart/form-data',
                    'json'      => 'Content-Type: application/json',
                ];
                $headers[] = $contentType['json'];
                $ch = curl_init();
                // 设置url
                $url = $info['url'];
                curl_setopt($ch, CURLOPT_URL, $url);
                curl_setopt($ch, CURLOPT_HTTPHEADER,$headers);
                curl_setopt($ch, CURLOPT_HEADER, false);
                $data = isset($info['params']) ? $info['params'] : null;
                if (false == empty($data)) {
                    $data = json_encode($data);
                    curl_setopt($ch, CURLOPT_POST, 1);
                    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();
        }
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值