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