php多线程请求post

多线程代码

/**
     * 多线程请求post
     * @param string $name 接口名称
     * @param array $data_string 数据
     * @param int $timeout 超时时间
     * @param array $header 头信息
     * @return array
     */
    private static function curl_http_post($name, $array, $timeout = 60, $header = [])
    {
        $res = array();
        $mh = curl_multi_init();//创建多个curl语柄
        $url = self::$url . $name;
        foreach ($array as $ke => $val) {

            $data = $val;
            $post_data = json_encode($data);//substr($o,0,-1);

            $conn[$ke] = curl_init($url);
            curl_setopt($conn[$ke], CURLOPT_SSL_VERIFYPEER, false);
            curl_setopt($conn[$ke], CURLOPT_ENCODING, 'gzip');
            curl_setopt($conn[$ke], CURLOPT_TIMEOUT, $timeout);//设置超时时间
            curl_setopt($conn[$ke], CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; MSIE 5.01; Windows NT 5.0)');
            curl_setopt($conn[$ke], CURLOPT_MAXREDIRS, 7);//HTTp定向级别
            curl_setopt($conn[$ke], CURLOPT_HEADER, 0);//这里不要header,加块效率
            curl_setopt($conn[$ke], CURLOPT_HTTPHEADER, $header);
            curl_setopt($conn[$ke], CURLOPT_FOLLOWLOCATION, 1); // 302 redirect
            curl_setopt($conn[$ke], CURLOPT_RETURNTRANSFER, 1);

            curl_setopt($conn[$ke], CURLOPT_POST, 1);                //post提交方式
            curl_setopt($conn[$ke], CURLOPT_POSTFIELDS, $post_data);

            curl_multi_add_handle($mh, $conn[$ke]);
        }

        // 执行批处理句柄
        $active = null;
        do {
            $mrc = curl_multi_exec($mh, $active);//当无数据,active=true
        } while ($mrc == CURLM_CALL_MULTI_PERFORM);//当正在接受数据时
        while ($active && $mrc == CURLM_OK) {//当无数据时或请求暂停时,active=true
            do {
                $mrc = curl_multi_exec($mh, $active);
            } while ($mrc == CURLM_CALL_MULTI_PERFORM);
        }

        foreach ($array as $k => $url) {
            curl_error($conn[$k]);
            $res[$k] = curl_multi_getcontent($conn[$k]);//获得返回信息
            $header[$k] = curl_getinfo($conn[$k]);//返回头信息
            curl_close($conn[$k]);//关闭语柄
            // curl_multi_remove_handle($mh  , $conn[$k]);//释放资源
        }

        curl_multi_close($mh);
        foreach ($res as $key => &$value) {
            $value = json_decode($value, true);
        }
        return $res;
    }

调用方式

$result = self::curl_http_post($name, $data, 60, ["Content-Type: application/json"]);
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值