PHP封装CURL扩展类实例

5年以前  |  阅读数:417 次  |  编程语言:PHP 

本文实例讲述了PHP封装CURL扩展类。分享给大家供大家参考。具体如下:


    <?php
    /**
    * @description: 封装CURL扩展
    * @date: 2014-07-28 16:04
    */
    /**
    * @编码规范
    * @class 类名首字母大写,类名为多个单词, 每个大字首字母大写 eg: class Curl , class CurlPage
    * @variable 变量名小写, 变量名为多个单词, 每个单词小写,使用下划线_分割 eg: $curl_result
    * @function 函数名与类名规则相同 eg: function SendRequest
    * @params 函数形参规则与变量名相同
    * @class-variable 成员变量,以下划线结尾,多个单词使用下划线分隔. eg: private $host_name_
    */
    /**
    * @要求
    *
    */
    class Curl{
    /**
    * @请求的host
    */
    private $host_;
    /**
    * @curl 句柄
    */
    private $ch_;
    /**
    * @超时限制时间
    */
    const time_=5;
    /**
    * @请求的设置
    */
    private $options_;
    /**
    * @保存请求头信息
    */
    private $request_header_;
    /**
    * @保存响应头信息
    */
    private $response_header_;
    /**
    * @body_ 用于保存curl请求返回的结果
    */
    private $body_;
    /**
    * @读取cookie
    */
    private $cookie_file_;
    /**
    * @写入cookie
    */
    private $cookie_jar_;
    /**
    * @todo proxy
    * @构造函数,初始化CURL回话
    */
    public function Start($url){
    $this->ch_ = curl_init($url);
    curl_setopt($this->ch_, CURLOPT_HEADER, 1);
    curl_setopt($this->ch_, CURLOPT_RETURNTRANSFER , 1 );
    }
    /**
    * @返回响应头
    */
    public function ResponseHeader($url){
    if (!function_exists('http_parse_headers')) {
    function http_parse_headers ($raw_headers){
    $headers = array();
    foreach (explode("\n", $raw_headers) as $i => $h) {
    $h = explode(':', $h, 2);
    if (isset($h[1])) {
    if(!isset($headers[$h[0]])) {
    $headers[$h[0]] = trim($h[1]);
    } else if(is_array($headers[$h[0]])) {
    $tmp = array_merge($headers[$h[0]],array(trim($h[1])));
    $headers[$h[0]] = $tmp;
    } else {
    $tmp = array_merge(array($headers[$h[0]]),array(trim($h[1])));
    $headers[$h[0]] = $tmp;
    }
    }
    }
    return $headers;
    }
    }
    $this->Start($url);
    curl_setopt($this->ch_, CURLOPT_TIMEOUT, Curl::time_);
    $this->body_=$this->Execx();
    $header_size = curl_getinfo($this->ch_, CURLINFO_HEADER_SIZE);
    $this->response_header_ = substr($this->body_, $start = 0, $offset = $header_size);
    $this->response_header_ = http_parse_headers($this->response_header_);
    print_r($this->response_header_);
    return $this->Close($this->body_);
    }
    /**
    * @读取cookie
    */
    public function LoadCookie($url,$cookie_file){
    $this->Start($url);
    curl_setopt($this->ch_, CURLOPT_COOKIE, 1);
    curl_setopt($this->ch_, CURLOPT_COOKIEFILE , $cookie_file);
    $this->body_=$this->Execx();
    return $this->Close($this->body_);
    }
    /**
    * @写入cookie
    */
    public function SaveCookie($url){
    $this->Start($url);
    curl_setopt($this->ch_, CURLOPT_COOKIE, 1);
    curl_setopt($this->ch_, CURLOPT_COOKIEFILE ,'cookie.txt');
    curl_setopt($this->ch_, CURLOPT_COOKIEJAR , 'cookie.txt');
    $this->body_=$this->Execx();
    return $this->Close($this->body_);
    }
    /**
    * @设置HEADER
    */
    public function SetHeader($headers = null){
    if (is_array($headers) && count($headers) > 0) {
    curl_setopt($this->ch_, CURLOPT_HTTPHEADER, $headers);
    }
    }
    /**
    * @GET请求
    */
    public function Get($url, array $params = array()) {
    if ($params) {
    if (strpos($url, '?')) {
    $url .= "&".http_build_query($params);
    }
    else {
    $url .= "?".http_build_query($params);
    }
    }
    $this->Start($url);
    curl_setopt($this->ch_, CURLOPT_TIMEOUT, Curl::time_);
    if (strpos($url, 'https') === 0) {
    curl_setopt($this->ch_, CURLOPT_SSL_VERIFYHOST, 0);
    curl_setopt($this->ch_, CURLOPT_SSL_VERIFYPEER, 0);
    }
    $this->body_=$this->Execx();
    return $this->Close($this->body_);
    }
    /**
    * @POST请求
    */
    public function Post($url, array $params = array()) {
    $this->Start($url);
    curl_setopt($this->ch_, CURLOPT_SSL_VERIFYPEER, 0);
    curl_setopt($this->ch_, CURLOPT_HTTPHEADER, array("Content-Type: application/x-www-form-urlencoded"));
    curl_setopt($this->ch_, CURLOPT_POST, true);
    curl_setopt($this->ch_, CURLOPT_TIMEOUT, Curl::time_);
    if ($params) {
    curl_setopt($this->ch_, CURLOPT_POSTFIELDS, http_build_query($params));
    }
    $this->body_=$this->Execx();
    return $this->Close($this->body_);
    }
    /**
    * @tips: google http head 方法
    */
    public function Head($url, array $params = array()) {
    $this->Start($url);
    curl_setopt($this->ch_, CURLOPT_TIMEOUT, Curl::time_);
    curl_setopt($this->ch_, CURLOPT_RETURNTRANSFER , 0);
    curl_setOpt($this->ch_,CURLOPT_NOBODY, true);
    $this->body_=$this->Execx();
    return $this->Close($this->body_);
    }
    /**
    * @执行CURL会话
    */
    public function Execx(){
    return curl_exec($this->ch_);
    }
    /**
    * @关闭CURL句柄
    */
    public function Close($body_){
    if ($body_ === false) {
    echo "CURL Error: " . curl_error($body_);
    return false;
    }
    curl_close($this->ch_);
    return $body_;
    }
    }

希望本文所述对大家的php程序设计有所帮助。

 相关文章:
PHP分页显示制作详细讲解
SSH 登录失败:Host key verification failed
获取IMSI
将二进制数据转为16进制以便显示
获取IMEI
文件下载
贪吃蛇
双位运算符
PHP自定义函数获取搜索引擎来源关键字的方法
Java生成UUID
发送邮件
年的日历图
提取后缀名
在Zeus Web Server中安装PHP语言支持
让你成为最历害的git提交人
Yii2汉字转拼音类的实例代码
再谈PHP中单双引号的区别详解
指定应用ID以获取对应的应用名称
Python 2与Python 3版本和编码的对比
php封装的page分页类完整实例