php curl方式实现 post,get
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; } } }
posted on 2022-07-22 14:46 running-fly 阅读(36) 评论(0) 编辑 收藏 举报