include_once 'curl.cls.php';
$str = '
$a = \'welcome \';
echo($a." this message from service data.");
';
$str = base64_encode($str);
$curl = new Curl();
$args = array(CURLOPT_HEADER=>0, CURLOPT_RETURNTRANSFER=>1, CURLOPT_TIMEOUT=>3);
$post = $curl->curlPost("http://www.test.com/diyalbum/recieve.php", $str, $args);
echo $post;
class Curl {
# @var resource: curl的一个资源
private static $_rs;
# @var string: POST的数据
private $_data;
# @var boolean: 是否返回执行结构
private $_return = true;
# 构造函数: 检测是否安装CURL库
public function __construct() {
if(!function_exists('curl_init')) {
exit('没有安装CURL库');
}
}
# 析构函数
public function __destruct() {
}
# 创建一个CURL 会话
private function _curlCreate() {
self::$_rs = curl_init();
}
/**
* 执行CURL会话
*
* @param string $method 方式 GET、POST、PUT
* @param string $url http://、https://、file://
* @param array $data POST的数据格式: array or string
* @param array $args CURL设置的CURLOPT属性
* CURLOPT_HEADER: 是否显示头部信息, CURLOPT_RETURNTRANSFER:获取数据返回, CURLOPT_TIMEOUT: 设置curl超时秒数,例如将信息POST出去3秒钟后自动结束运行
* 例如:args=array(CURLOPT_HEADER=>false, CURLOPT_RETURNTRANSFER=>true, CURLOPT_TIMEOUT=>3);
* @param string $username 是否匿名访问
* @param string $password 对应的密码
* @return mix [成功(可能返回string)|失败(可能是false或者array[错误代码、错误内容])]
*/
private function _curlExec($method, $url, $args=array(), $data='', $userAgent='', $httpHeaders='', $username='',$password='') {
$this->_curlCreate();
# 针对url进行判断,如果包含https需要使用ssl方式
if(is_string($url) === true && strlen($url) > 0) {
curl_setopt(self::$_rs,CURLOPT_URL,$url);
if (strpos($url,'https')) {
curl_setopt(self::$_rs,CURLOPT_SSL_VERIFYPEER,true);
}
} else {
return false;
}
# 设置CURLOPT属性
foreach ($args as $key => $value) {
curl_setopt(self::$_rs,$key,$value);
}
# 选择发送方式
switch($method) {
case 'POST':
# $data必须是数组形式传递
if( is_array($data) ) {
# 下面四行代码作用是方便接受页面直接使用php://input获取
foreach ($data as $key => $value) {
$tmpData[] = $key .'='. urlencode($value);
}
$this->_data = implode('&',$tmpData);
unset($tmpData);
} else if( is_string($data) ) {
$this->_data = $data;
} else {
return false;
}
curl_setopt(self::$_rs, CURLOPT_POST, true);
curl_setopt(self::$_rs, CURLOPT_POSTFIELDS, $this->_data);
break;
case 'GET':
# GET方式无需做任何事情,需要get的数据直接通过url发送
break;
case 'PUT':
# PUT的时候需要告诉请求URL本次是PUT形式发送数据,目前尚不健壮
curl_setopt(self::$_rs,CURLOPT_PUT,true);
break;
}
if (empty($username) === false) {
# 如果需要认证,则发送账号密码过去
curl_setopt(self::$_rs, CURLOPT_USERPWD, $username . ':' . $password);
}
if (strlen($userAgent)) {
# 在HTTP请求中包含一个"user-agent"头的字符串
curl_setopt(self::$_rs, CURLOPT_USERAGENT, $userAgent);
}
if (is_array($httpHeaders)) {
# 设置一个header中传输内容的数组
curl_setopt(self::$_rs, CURLOPT_HTTPHEADER, $httpHeaders);
}
# 执行会话
$result = curl_exec(self::$_rs);
# 如果有执行失败,则返回CURL ERROR
if(curl_errno(self::$_rs)) {
# array(错误代码,错误报告)
return array(curl_errno(self::$_rs),curl_error(self::$_rs));
}
curl_close(self::$_rs);
return $result;
}
/**
* POST方式访问
*
* @param string $url 需要访问的地址
* @param array $data 需要POST的数据
* @param array $args 需要设置的CURLOPT属性
* @return mix [成功(可能返回string)|失败(可能是false或者array[错误代码、错误内容])]
*/
public function curlPost($url,$data='',$args=array(), $userAgent='',$httpHeaders='') {
return $this->_curlExec('POST',$url,$args,$data, $userAgent,$httpHeaders);
}
/**
* GET方式访问
*
* @param string $url 需要访问的地址
* @param array $args 需要设置的CURLOPT属性
* @return mix [成功(可能返回string)|失败(可能是false或者array[错误代码、错误内容])]
*/
public function curlGet($url,$args=array()) {
return $this->_curlExec('GET',$url,$args);
}
/**
* PUT方式访问,目前尚不健壮,暂时改为私有
*
* @param string $url 需要访问的地址
* @param array $args 需要设置的CURLOPT属性
* @param array $data 需要PUT的数据
* @return mix [成功(可能返回string)|失败(可能是false或者array[错误代码、错误内容])]
*/
private function curlPut($url,$args=array(),$data='',$userAgent='',$httpHeaders='') {
return $this->_curlExec('PUT',$url,$args,$data,$userAgent,$httpHeaders);
}
} |
最新评论