• php curl方式实现 post,get running


    class AipHttpClient{
    
        /**
         * HttpClient
         * @param array $headers HTTP header
         */
        public function __construct($headers=array()){
            $this->headers = $this->buildHeaders($headers);
            $this->connectTimeout = 60000;
            $this->socketTimeout = 60000;
            $this->conf = array();
        }
    
        /**
         * 连接超时
         * @param int $ms 毫秒
         */
        public function setConnectionTimeoutInMillis($ms){
            $this->connectTimeout = $ms;
        }
    
        /**
         * 响应超时
         * @param int $ms 毫秒
         */
        public function setSocketTimeoutInMillis($ms){
            $this->socketTimeout = $ms;
        }    
    
        /**
         * 配置
         * @param array $conf
         */
        public function setConf($conf){
            $this->conf = $conf;
        }
    
        /**
         * 请求预处理
         * @param resource $ch
         */
        public function prepare($ch){
            foreach($this->conf as $key => $value){
                curl_setopt($ch, $key, $value);
            }
        }    
    
        /**
         * @param  string $url
         * @param  array $data HTTP POST BODY
         * @param  array $param HTTP URL
         * @param  array $headers HTTP header
         * @return array
         */
        public function post($url, $data=array(), $params=array(), $headers=array()){
            $url = $this->buildUrl($url, $params);
            $headers = array_merge($this->headers, $this->buildHeaders($headers));
            $ch = curl_init();
            $this->prepare($ch);
            curl_setopt($ch, CURLOPT_URL, $url);
            curl_setopt($ch, CURLOPT_POST, 1);
            curl_setopt($ch, CURLOPT_HEADER, false);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
            curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
            curl_setopt($ch, CURLOPT_POSTFIELDS, is_array($data) ? http_build_query($data) : $data);
            curl_setopt($ch, CURLOPT_TIMEOUT_MS, $this->socketTimeout);
            curl_setopt($ch, CURLOPT_CONNECTTIMEOUT_MS, $this->connectTimeout);
            curl_setopt($ch, CURLOPT_ENCODING, '');
            $content = curl_exec($ch);
            $code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    
            if($code === 0){
                throw new Exception(curl_error($ch));
            }
    
            curl_close($ch);
            return array(
                'code' => $code,
                'content' => $content,
            );
        }
    
        /**
         * @param  string $url
         * @param  array $datas HTTP POST BODY
         * @param  array $param HTTP URL
         * @param  array $headers HTTP header
         * @return array
         */
        public function multi_post($url, $datas=array(), $params=array(), $headers=array()){
            $url = $this->buildUrl($url, $params);
            $headers = array_merge($this->headers, $this->buildHeaders($headers));
    
            $chs = array();
            $result = array();
            $mh = curl_multi_init();
            foreach($datas as $data){        
                $ch = curl_init();
                $chs[] = $ch;
                $this->prepare($ch);
                curl_setopt($ch, CURLOPT_URL, $url);
                curl_setopt($ch, CURLOPT_POST, 1);
                curl_setopt($ch, CURLOPT_HEADER, false);
                curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
                curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
                curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
                curl_setopt($ch, CURLOPT_POSTFIELDS, is_array($data) ? http_build_query($data) : $data);
                curl_setopt($ch, CURLOPT_TIMEOUT_MS, $this->socketTimeout);
                curl_setopt($ch, CURLOPT_CONNECTTIMEOUT_MS, $this->connectTimeout);
                curl_multi_add_handle($mh, $ch);
            }
    
            $running = null;
            do{
                curl_multi_exec($mh, $running);
                usleep(100);
            }while($running);
    
            foreach($chs as $ch){        
                $content = curl_multi_getcontent($ch);
                $code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
                $result[] = array(
                    'code' => $code,
                    'content' => $content,
                );
                curl_multi_remove_handle($mh, $ch);
            }
            curl_multi_close($mh);
            
            return $result;
        }
    
        /**
         * @param  string $url
         * @param  array $param HTTP URL
         * @param  array $headers HTTP header
         * @return array
         */
        public function get($url, $params=array(), $headers=array()){
            $url = $this->buildUrl($url, $params);
            $headers = array_merge($this->headers, $this->buildHeaders($headers));
    
            $ch = curl_init();
            $this->prepare($ch);
            curl_setopt($ch, CURLOPT_URL, $url);
            curl_setopt($ch, CURLOPT_HEADER, false);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
            curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
            curl_setopt($ch, CURLOPT_TIMEOUT_MS, $this->socketTimeout);
            curl_setopt($ch, CURLOPT_CONNECTTIMEOUT_MS, $this->connectTimeout);
            $content = curl_exec($ch);
            $code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    
            if($code === 0){
                throw new Exception(curl_error($ch));
            }
            
            curl_close($ch);
            return array(
                'code' => $code,
                'content' => $content,
            );
        }
    
        /**
         * 构造 header
         * @param  array $headers
         * @return array
         */
        private function buildHeaders($headers){
            $result = array();
            foreach($headers as $k => $v){
                $result[] = sprintf('%s:%s', $k, $v);
            }
            return $result;
        }
    
        /**
         * 
         * @param  string $url
         * @param  array $params 参数
         * @return string
         */
        private function buildUrl($url, $params){
            if(!empty($params)){
                $str = http_build_query($params);
                return $url . (strpos($url, '?') === false ? '?' : '&') . $str;
            }else{
                return $url;
            }
        }
    }
    

      

  • 相关阅读:
    Spring Boot基础
    MyBatis开启二级缓存
    MyBatis逆向工程
    html实现“加入收藏”代码
    vue-router 基本使用
    vue 脚手架安装
    webpack入门 webpack4常见出错之处
    $.ajax()方法详解
    防止网页被嵌套
    H5字符实体参考
  • 原文地址:https://www.cnblogs.com/zxqblogrecord/p/16505738.html
Copyright © 2020-2023  润新知