load($url, $param, $type, $json, $header, $agent, $refer); } /** * get * * @return mixed */ public static function get($url, $param = false, $type = 'get', $json = false, $header = false, $agent = false, $refer = false) { return self::getInstance($url, $param, $type, $json, $header, $agent, $refer)->result(); } /** * get * * @return mixed */ public static function post($url, $param = false, $json = false, $header = false, $agent = false, $refer = false) { return self::getInstance($url, $param, $type = 'post', $json, $header, $agent, $refer)->result(); } /** * load * * @return mixed */ public function load($url, $param = false, $type = '', $json = false, $header = false, $agent = false, $refer = false) { $this->init(); $param = $this->param($param); $this->setRequest($type); if ($header) { $this->setHeader($header); } if (!$agent) { $agent = 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'; } if ($agent) { $this->setAgent($agent); } if ($refer) { $this->setRefer($refer); } if ($json) { $this->setJson($param); } elseif ($type == 'post' || $type == 'put') { $this->setParam($param); } elseif ($param) { if (strpos($url, '?')) { $url .= '&'; } else { $url .= '?'; } $url .= http_build_query($param); } if (strpos($url, '??')) { $url = str_replace('??', '?', $url); } $this->setUrl($url); return $this; } /** * param * * @return array */ private function param($param) { if (is_array($param) && isset($param[0])) { $temp = $param; $param = array(); foreach ($temp as $k => $v) { if (is_array($v)) { $param = array_merge($param, $v); } else { $param[$k] = $v; } } } return $param; } /** * setting * * @return CurlService */ public function setting($setting = array()) { if ($setting) { $this->init(); foreach ($setting as $k => $v) { $method = 'set' . ucfirst($k); $this->$method($v); } } return $this; } /** * result * * @return CurlService */ public function result($setting = true) { if ($this->header) { curl_setopt($this->handle, CURLOPT_HTTPHEADER, $this->header); } curl_setopt($this->handle, CURLOPT_HEADER, false); if (input('debug')) { curl_setopt($this->handle, CURLINFO_HEADER_OUT, true); } $result = curl_exec($this->handle); $debug = array(); if (input('debug')) { $debug['request'] = curl_getinfo($this->handle, CURLINFO_HEADER_OUT); } curl_close($this->handle); $data = $result; if (!input('all') && is_array($data)) { $data = count($data) . ' records'; } $debug['url'] = $this->url; $debug['param'] = $this->param; $debug['result'] = $data; # 记录日志的地方 return $result; } /** * resultCookie * * @return CurlService */ public function resultCookie() { $result = $this->result(); list($header, $body) = explode("\r\n\r\n", $result, 2); preg_match_all("/Set\-Cookie:([^;]*);/", $header, $matches); $info['cookie'] = substr($matches[1][0], 1); $info['content'] = $body; return $info; } /** * setVerbose * * @return CurlService */ public function setVerbose($verbose) { curl_setopt($this->handle, CURLOPT_VERBOSE, $verbose); return $this; } /** * setAgent * * @return CurlService */ public function setAgent($agent) { curl_setopt($this->handle, CURLOPT_USERAGENT, $agent); return $this; } /** * setUserPWD * * @return CurlService */ public function setUserPWD($userpwd) { curl_setopt($this->handle, CURLOPT_USERPWD, $userpwd); return $this; } /** * setTimeOut * * @return CurlService */ public function setTimeOut($time) { curl_setopt($this->handle, CURLOPT_TIMEOUT, $time); return $this; } /** * setCookie * * @return CurlService */ public function setCookie($cookie) { curl_setopt($this->handle, CURLOPT_COOKIE, $cookie); return $this; } /** * setUrl * * @return CurlService */ public function setUrl($url) { $this->url = $url; curl_setopt($this->handle, CURLOPT_URL, $url); curl_setopt($this->handle, CURLOPT_RETURNTRANSFER, true); return $this; } /** * setParam * * @return CurlService */ public function setParam($param) { $this->param = $param; curl_setopt($this->handle, CURLOPT_POSTFIELDS, $param); return $this; } /** * setEncode * * @return CurlService */ public function setEncode($encode) { curl_setopt($this->handle, CURLOPT_ENCODING, $encode); return $this; } /** * setJson * * @return CurlService */ public function setJson($param) { $param = str_replace("\\/", "/", json_encode((object) $param, JSON_UNESCAPED_UNICODE)); $header['Content-Type'] = 'application/json'; $header['Content-Length'] = strlen($param); $this->setHeader($header); $this->setParam($param); return $this; } /** * setRefer * * @return CurlService */ public function setRefer($refer) { curl_setopt($this->handle, CURLOPT_REFERER, $refer); return $this; } /** * setRefer * * @return CurlService */ public function setRequest($type) { if ($type == 'post') { curl_setopt($this->handle, CURLOPT_POST, true); } elseif ($type == 'put' || $type == 'delete') { curl_setopt($this->handle, CURLOPT_CUSTOMREQUEST, strtoupper($type)); } else { curl_setopt($this->handle, CURLOPT_HTTPGET, true); } return $this; } /** * setIp * * @return CurlService */ public function setIp($ip) { $config['CLIENT-IP'] = $ip; $config['X-FORWARDED-FOR'] = $ip; $this->setHeader($config); return $this; } /** * setHeader * * @return CurlService */ public function setHeader($config) { if (is_array($config)) { foreach ($config as $k => $v) { $this->header[] = $k . ':' . $v; } } else { $this->header = explode("\n", $config); } return $this; } /** * init * * @return mixed */ private function init() { if (!$this->handle) { $this->handle = curl_init(); } } }