| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235 | 
							- <?php
 
- namespace App\Service;
 
- class AipHttpClient
 
- {
 
-     protected $headers;
 
-     protected $connectTimeout;
 
-     protected $socketTimeout;
 
-     protected $conf;
 
-     /**
 
-      * 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);
 
-         $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,
 
-         );
 
-     }
 
-     
 
-     /**
 
-      * API请求
 
-      * @param $url  链接
 
-      * @param $data  参数
 
-      */
 
-     public function postnew($url, $data = null, $time=0)
 
-     {
 
-         $ch = curl_init();
 
-         curl_setopt($ch, CURLOPT_URL, $url);
 
-         curl_setopt($ch, CURLOPT_HEADER, 0);
 
-         curl_setopt($ch, CURLOPT_TIMEOUT, $time);          //单位秒,也可以使用
 
-         curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
 
-         curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); //这个是重点,规避ssl的证书检查。
 
-         curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); // 跳过host验证
 
-         if(!empty($data)){
 
-             curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
 
-         }
 
-         $content = curl_exec($ch);
 
-         curl_close($ch);
 
-         return $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;
 
-         }
 
-     }
 
- }
 
 
  |