|  |  |  | @ -1,24 +1,40 @@ | 
			
		
	
		
			
				
					|  |  |  |  | <?php | 
			
		
	
		
			
				
					|  |  |  |  | namespace LaneWeChat\Core; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | /** | 
			
		
	
		
			
				
					|  |  |  |  |  * CURL工具类 | 
			
		
	
		
			
				
					|  |  |  |  |  * 用于简化HTTP请求的发送,支持GET、POST等请求方法。 | 
			
		
	
		
			
				
					|  |  |  |  |  * Class Curl | 
			
		
	
		
			
				
					|  |  |  |  |  */ | 
			
		
	
		
			
				
					|  |  |  |  | class Curl { | 
			
		
	
		
			
				
					|  |  |  |  |     private static $_ch; | 
			
		
	
		
			
				
					|  |  |  |  |     private static $_header; | 
			
		
	
		
			
				
					|  |  |  |  |     private static $_body; | 
			
		
	
		
			
				
					|  |  |  |  |      | 
			
		
	
		
			
				
					|  |  |  |  |     private static $_cookie = array(); | 
			
		
	
		
			
				
					|  |  |  |  |     private static $_options = array(); | 
			
		
	
		
			
				
					|  |  |  |  |     private static $_url = array (); | 
			
		
	
		
			
				
					|  |  |  |  |     private static $_referer = array (); | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     private static $_ch; // 存储CURL会话句柄 | 
			
		
	
		
			
				
					|  |  |  |  |     private static $_header;// 存储响应头部信息 | 
			
		
	
		
			
				
					|  |  |  |  |     private static $_body;// 存储响应主体信息 | 
			
		
	
		
			
				
					|  |  |  |  |      | 
			
		
	
		
			
				
					|  |  |  |  |     private static $_cookie = array();// 存储Cookie信息 | 
			
		
	
		
			
				
					|  |  |  |  |     private static $_options = array();// 存储额外的CURL选项 | 
			
		
	
		
			
				
					|  |  |  |  |     private static $_url = array ();// 存储URL信息 | 
			
		
	
		
			
				
					|  |  |  |  |     private static $_referer = array ();// 存储Referer信息 | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     /** | 
			
		
	
		
			
				
					|  |  |  |  |      * 调用外部URL | 
			
		
	
		
			
				
					|  |  |  |  |      * 根据提供的参数,使用GET或POST方法发送请求,并返回结果。 | 
			
		
	
		
			
				
					|  |  |  |  |      * @param string $queryUrl 请求的URL地址 | 
			
		
	
		
			
				
					|  |  |  |  |      * @param mixed $param 发送的数据,可以是数组或字符串 | 
			
		
	
		
			
				
					|  |  |  |  |      * @param string $method 请求方法,默认为'get' | 
			
		
	
		
			
				
					|  |  |  |  |      * @param bool $is_json 是否期望返回JSON格式的数据 | 
			
		
	
		
			
				
					|  |  |  |  |      * @param bool $is_urlcode 是否对参数进行URL编码 | 
			
		
	
		
			
				
					|  |  |  |  |      * @return bool|mixed 请求失败返回false,成功则返回解码后的数据或原始数据 | 
			
		
	
		
			
				
					|  |  |  |  |      */ | 
			
		
	
		
			
				
					|  |  |  |  |     public static function callWebServer($queryUrl, $param='', $method='get', $is_json=true, $is_urlcode=true) { | 
			
		
	
		
			
				
					|  |  |  |  |         if (empty($queryUrl)) { | 
			
		
	
		
			
				
					|  |  |  |  |             return false; | 
			
		
	
		
			
				
					|  |  |  |  |             return false;// 如果URL为空,则直接返回false | 
			
		
	
		
			
				
					|  |  |  |  |         } | 
			
		
	
		
			
				
					|  |  |  |  |         $method = strtolower($method); | 
			
		
	
		
			
				
					|  |  |  |  |         $ret = ''; | 
			
		
	
		
			
				
					|  |  |  |  |         $param = empty($param) ? array() : $param; | 
			
		
	
		
			
				
					|  |  |  |  |         self::_init(); | 
			
		
	
		
			
				
					|  |  |  |  |         // 根据请求方法,调用对应的私有方法发送请求 | 
			
		
	
		
			
				
					|  |  |  |  |         if ($method == 'get') { | 
			
		
	
		
			
				
					|  |  |  |  |             $ret = self::_httpGet($queryUrl, $param); | 
			
		
	
		
			
				
					|  |  |  |  |         } elseif($method == 'post') { | 
			
		
	
	
		
			
				
					|  |  |  | @ -26,27 +42,44 @@ class Curl { | 
			
		
	
		
			
				
					|  |  |  |  |         } | 
			
		
	
		
			
				
					|  |  |  |  |         if(!empty($ret)){ | 
			
		
	
		
			
				
					|  |  |  |  |             if($is_json){ | 
			
		
	
		
			
				
					|  |  |  |  |                 return json_decode($ret, true); | 
			
		
	
		
			
				
					|  |  |  |  |                 return json_decode($ret, true);// 如果期望返回JSON格式的数据,则对返回的数据进行JSON解码 | 
			
		
	
		
			
				
					|  |  |  |  |             }else{ | 
			
		
	
		
			
				
					|  |  |  |  |                 return $ret; | 
			
		
	
		
			
				
					|  |  |  |  |                 return $ret;// 否则返回原始数据 | 
			
		
	
		
			
				
					|  |  |  |  |             } | 
			
		
	
		
			
				
					|  |  |  |  |         } | 
			
		
	
		
			
				
					|  |  |  |  |         return true; | 
			
		
	
		
			
				
					|  |  |  |  |         return true;// 如果请求成功,则返回true | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     /** | 
			
		
	
		
			
				
					|  |  |  |  |      * 初始化CURL会话 | 
			
		
	
		
			
				
					|  |  |  |  |      * 创建一个新的CURL会话,并设置一些默认的CURL选项。 | 
			
		
	
		
			
				
					|  |  |  |  |      */ | 
			
		
	
		
			
				
					|  |  |  |  |     private static function _init() { | 
			
		
	
		
			
				
					|  |  |  |  |         self::$_ch = curl_init(); | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |         curl_setopt(self::$_ch, CURLOPT_HEADER, true); | 
			
		
	
		
			
				
					|  |  |  |  |         curl_setopt(self::$_ch, CURLOPT_HEADER, true);// 设置CURL选项,启用响应头和返回传输 | 
			
		
	
		
			
				
					|  |  |  |  |         curl_setopt(self::$_ch, CURLOPT_RETURNTRANSFER, true); | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  |     }   // 设置CURL选项,使每次请求都是新的连接 | 
			
		
	
		
			
				
					|  |  |  |  |     // curl_setopt(self::$_ch, CURLOPT_FRESH_CONNECT, true); | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |      /** | 
			
		
	
		
			
				
					|  |  |  |  |      * 设置CURL选项 | 
			
		
	
		
			
				
					|  |  |  |  |      * 允许用户自定义CURL会话的选项。 | 
			
		
	
		
			
				
					|  |  |  |  |      * @param array $optArray 包含选项的关联数组,其中'key'是CURL选项的常量,'value'是对应的值 | 
			
		
	
		
			
				
					|  |  |  |  |      */ | 
			
		
	
		
			
				
					|  |  |  |  |     public static function setOption($optArray=array()) { | 
			
		
	
		
			
				
					|  |  |  |  |         foreach($optArray as $opt) { | 
			
		
	
		
			
				
					|  |  |  |  |             curl_setopt(self::$_ch, $opt['key'], $opt['value']); | 
			
		
	
		
			
				
					|  |  |  |  |         }  | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  |      | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     /** | 
			
		
	
		
			
				
					|  |  |  |  |      * 关闭CURL会话 | 
			
		
	
		
			
				
					|  |  |  |  |      * 释放CURL会话占用的资源。 | 
			
		
	
		
			
				
					|  |  |  |  |      * @return bool 操作成功返回true | 
			
		
	
		
			
				
					|  |  |  |  |      */ | 
			
		
	
		
			
				
					|  |  |  |  |     private static function _close() { | 
			
		
	
		
			
				
					|  |  |  |  |         if (is_resource(self::$_ch)) {   | 
			
		
	
		
			
				
					|  |  |  |  |             curl_close(self::$_ch);   | 
			
		
	
	
		
			
				
					|  |  |  | @ -55,25 +88,48 @@ class Curl { | 
			
		
	
		
			
				
					|  |  |  |  |         return true; | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  |      | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     /** | 
			
		
	
		
			
				
					|  |  |  |  |      * 发送GET请求 | 
			
		
	
		
			
				
					|  |  |  |  |      * 构建并发送一个HTTP GET请求,并将响应返回。 | 
			
		
	
		
			
				
					|  |  |  |  |      * @param string $url 请求的URL地址 | 
			
		
	
		
			
				
					|  |  |  |  |      * @param array $query 请求参数数组 | 
			
		
	
		
			
				
					|  |  |  |  |      * @return string 请求的响应内容 | 
			
		
	
		
			
				
					|  |  |  |  |      */ | 
			
		
	
		
			
				
					|  |  |  |  |     private static function _httpGet($url, $query=array()) { | 
			
		
	
		
			
				
					|  |  |  |  |         if (!empty($query)) {   | 
			
		
	
		
			
				
					|  |  |  |  |             $url .= (strpos($url, '?') === false) ? '?' : '&';   | 
			
		
	
		
			
				
					|  |  |  |  |             $url .= is_array($query) ? http_build_query($query) : $query;   | 
			
		
	
		
			
				
					|  |  |  |  |             $url .= is_array($query) ? http_build_query($query) : $query;  // 将数组参数转换为URL参数字符串 | 
			
		
	
		
			
				
					|  |  |  |  |         }   | 
			
		
	
		
			
				
					|  |  |  |  |          | 
			
		
	
		
			
				
					|  |  |  |  |         // 设置CURL选项,指定请求的URL | 
			
		
	
		
			
				
					|  |  |  |  |         curl_setopt(self::$_ch, CURLOPT_URL, $url); | 
			
		
	
		
			
				
					|  |  |  |  |         // 设置CURL选项,启用返回传输 | 
			
		
	
		
			
				
					|  |  |  |  |         curl_setopt(self::$_ch, CURLOPT_RETURNTRANSFER, 1); | 
			
		
	
		
			
				
					|  |  |  |  |         // 设置CURL选项,不返回响应头 | 
			
		
	
		
			
				
					|  |  |  |  |         curl_setopt(self::$_ch, CURLOPT_HEADER, 0); | 
			
		
	
		
			
				
					|  |  |  |  |         // 设置CURL选项,不验证SSL证书 | 
			
		
	
		
			
				
					|  |  |  |  |         curl_setopt(self::$_ch, CURLOPT_SSL_VERIFYPEER, FALSE); | 
			
		
	
		
			
				
					|  |  |  |  |         curl_setopt(self::$_ch, CURLOPT_SSL_VERIFYHOST, FALSE); | 
			
		
	
		
			
				
					|  |  |  |  |         // 设置CURL选项,设置SSL版本 | 
			
		
	
		
			
				
					|  |  |  |  |         curl_setopt(self::$_ch, CURLOPT_SSLVERSION, 1); | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |          // 执行CURL请求并获取响应 | 
			
		
	
		
			
				
					|  |  |  |  |         $ret = self::_execute(); | 
			
		
	
		
			
				
					|  |  |  |  |         self::_close(); | 
			
		
	
		
			
				
					|  |  |  |  |         self::_close();// 关闭CURL会话 | 
			
		
	
		
			
				
					|  |  |  |  |         return $ret;   | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  |      | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     /** | 
			
		
	
		
			
				
					|  |  |  |  |      * 发送POST请求 | 
			
		
	
		
			
				
					|  |  |  |  |      * 构建并发送一个HTTP POST请求,并将响应返回。 | 
			
		
	
		
			
				
					|  |  |  |  |      * @param string $url 请求的URL地址 | 
			
		
	
		
			
				
					|  |  |  |  |      * @param array $query 请求参数数组 | 
			
		
	
		
			
				
					|  |  |  |  |      * @param bool $is_urlcode 是否对参数进行URL编码 | 
			
		
	
		
			
				
					|  |  |  |  |      * @return string 请求的响应内容 | 
			
		
	
		
			
				
					|  |  |  |  |      */ | 
			
		
	
		
			
				
					|  |  |  |  |     private static function _httpPost($url, $query=array(), $is_urlcode=true) { | 
			
		
	
		
			
				
					|  |  |  |  |         // 如果参数是数组,则对每个参数进行URL编码 | 
			
		
	
		
			
				
					|  |  |  |  |         if (is_array($query)) { | 
			
		
	
		
			
				
					|  |  |  |  |             foreach ($query as $key => $val) {   | 
			
		
	
		
			
				
					|  |  |  |  |                 if($is_urlcode){ | 
			
		
	
	
		
			
				
					|  |  |  | @ -91,33 +147,68 @@ class Curl { | 
			
		
	
		
			
				
					|  |  |  |  |                 } | 
			
		
	
		
			
				
					|  |  |  |  |             }   | 
			
		
	
		
			
				
					|  |  |  |  |         } | 
			
		
	
		
			
				
					|  |  |  |  |         curl_setopt(self::$_ch, CURLOPT_URL, $url); | 
			
		
	
		
			
				
					|  |  |  |  |         curl_setopt(self::$_ch, CURLOPT_RETURNTRANSFER, 1); | 
			
		
	
		
			
				
					|  |  |  |  |         curl_setopt(self::$_ch, CURLOPT_HEADER, 0); | 
			
		
	
		
			
				
					|  |  |  |  |         curl_setopt(self::$_ch, CURLOPT_POST, true ); | 
			
		
	
		
			
				
					|  |  |  |  |         curl_setopt(self::$_ch, CURLOPT_POSTFIELDS, $query); | 
			
		
	
		
			
				
					|  |  |  |  |         curl_setopt(self::$_ch, CURLOPT_SSL_VERIFYPEER, FALSE); | 
			
		
	
		
			
				
					|  |  |  |  |         curl_setopt(self::$_ch, CURLOPT_SSL_VERIFYHOST, FALSE); | 
			
		
	
		
			
				
					|  |  |  |  |         curl_setopt(self::$_ch, CURLOPT_SSLVERSION, 1); | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |         $ret = self::_execute(); | 
			
		
	
		
			
				
					|  |  |  |  |         self::_close(); | 
			
		
	
		
			
				
					|  |  |  |  |         return $ret;   | 
			
		
	
		
			
				
					|  |  |  |  |        // 设置CURL选项,指定请求的URL | 
			
		
	
		
			
				
					|  |  |  |  |        curl_setopt(self::$_ch, CURLOPT_URL, $url); | 
			
		
	
		
			
				
					|  |  |  |  |        // 设置CURL选项,启用返回传输 | 
			
		
	
		
			
				
					|  |  |  |  |        curl_setopt(self::$_ch, CURLOPT_RETURNTRANSFER, 1); | 
			
		
	
		
			
				
					|  |  |  |  |        // 设置CURL选项,不返回响应头 | 
			
		
	
		
			
				
					|  |  |  |  |        curl_setopt(self::$_ch, CURLOPT_HEADER, 0); | 
			
		
	
		
			
				
					|  |  |  |  |        // 设置CURL选项,启用POST请求 | 
			
		
	
		
			
				
					|  |  |  |  |        curl_setopt(self::$_ch, CURLOPT_POST, true ); | 
			
		
	
		
			
				
					|  |  |  |  |        // 设置CURL选项,指定POST请求的数据 | 
			
		
	
		
			
				
					|  |  |  |  |        curl_setopt(self::$_ch, CURLOPT_POSTFIELDS, $query); | 
			
		
	
		
			
				
					|  |  |  |  |        // 设置CURL选项,不验证SSL证书 | 
			
		
	
		
			
				
					|  |  |  |  |        curl_setopt(self::$_ch, CURLOPT_SSL_VERIFYPEER, FALSE); | 
			
		
	
		
			
				
					|  |  |  |  |        curl_setopt(self::$_ch, CURLOPT_SSL_VERIFYHOST, FALSE); | 
			
		
	
		
			
				
					|  |  |  |  |        // 设置CURL选项,设置SSL版本 | 
			
		
	
		
			
				
					|  |  |  |  |        curl_setopt(self::$_ch, CURLOPT_SSLVERSION, 1); | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |        // 执行CURL请求并获取响应 | 
			
		
	
		
			
				
					|  |  |  |  |        $ret = self::_execute(); | 
			
		
	
		
			
				
					|  |  |  |  |        // 关闭CURL会话 | 
			
		
	
		
			
				
					|  |  |  |  |        self::_close(); | 
			
		
	
		
			
				
					|  |  |  |  |        return $ret;   | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  |      | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |      /** | 
			
		
	
		
			
				
					|  |  |  |  |      * 发送PUT请求 | 
			
		
	
		
			
				
					|  |  |  |  |      * 构建并发送一个HTTP PUT请求,并将响应返回。 | 
			
		
	
		
			
				
					|  |  |  |  |      * @param string $url 请求的URL地址 | 
			
		
	
		
			
				
					|  |  |  |  |      * @param array $query 请求参数数组 | 
			
		
	
		
			
				
					|  |  |  |  |      * @return string 请求的响应内容 | 
			
		
	
		
			
				
					|  |  |  |  |      */ | 
			
		
	
		
			
				
					|  |  |  |  |     private static function _put($url, $query = array()) { | 
			
		
	
		
			
				
					|  |  |  |  |         // 设置CURL选项,指定请求方法为PUT | 
			
		
	
		
			
				
					|  |  |  |  |         curl_setopt(self::$_ch, CURLOPT_CUSTOMREQUEST, 'PUT');   | 
			
		
	
		
			
				
					|  |  |  |  |          | 
			
		
	
		
			
				
					|  |  |  |  |         return self::_httpPost($url, $query); | 
			
		
	
		
			
				
					|  |  |  |  |     }   | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     /** | 
			
		
	
		
			
				
					|  |  |  |  |      * 发送DELETE请求 | 
			
		
	
		
			
				
					|  |  |  |  |      * 构建并发送一个HTTP DELETE请求,并将响应返回。 | 
			
		
	
		
			
				
					|  |  |  |  |      * @param string $url 请求的URL地址 | 
			
		
	
		
			
				
					|  |  |  |  |      * @param array $query 请求参数数组 | 
			
		
	
		
			
				
					|  |  |  |  |      * @return string 请求的响应内容 | 
			
		
	
		
			
				
					|  |  |  |  |      */ | 
			
		
	
		
			
				
					|  |  |  |  |     private static function _delete($url, $query = array()) { | 
			
		
	
		
			
				
					|  |  |  |  |         // 设置CURL选项,指定请求方法为DELETE | 
			
		
	
		
			
				
					|  |  |  |  |         curl_setopt(self::$_ch, CURLOPT_CUSTOMREQUEST, 'DELETE');   | 
			
		
	
		
			
				
					|  |  |  |  |          | 
			
		
	
		
			
				
					|  |  |  |  |         return self::_httpPost($url, $query); | 
			
		
	
		
			
				
					|  |  |  |  |     }   | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     /** | 
			
		
	
		
			
				
					|  |  |  |  |      * 发送HEAD请求 | 
			
		
	
		
			
				
					|  |  |  |  |      * 构建并发送一个HTTP HEAD请求,并将响应返回。 | 
			
		
	
		
			
				
					|  |  |  |  |      * @param string $url 请求的URL地址 | 
			
		
	
		
			
				
					|  |  |  |  |      * @param array $query 请求参数数组 | 
			
		
	
		
			
				
					|  |  |  |  |      * @return string 请求的响应内容 | 
			
		
	
		
			
				
					|  |  |  |  |      */ | 
			
		
	
		
			
				
					|  |  |  |  |     private static function _head($url, $query = array()) { | 
			
		
	
		
			
				
					|  |  |  |  |         // 设置CURL选项,指定请求方法为HEAD | 
			
		
	
		
			
				
					|  |  |  |  |         curl_setopt(self::$_ch, CURLOPT_CUSTOMREQUEST, 'HEAD'); | 
			
		
	
		
			
				
					|  |  |  |  |          | 
			
		
	
		
			
				
					|  |  |  |  |         return self::_httpPost($url, $query); | 
			
		
	
	
		
			
				
					|  |  |  | @ -133,5 +224,5 @@ class Curl { | 
			
		
	
		
			
				
					|  |  |  |  |         return  $response; | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | ?> | 
			
		
	
		
			
				
					|  |  |  |  |     //  执行CURL请求 | 
			
		
	
		
			
				
					|  |  |  |  |     //  执行CURL会话 | 
			
		
	
	
		
			
				
					|  |  |  | 
 |