7,CURL工具类

作者: 陈钢镚学财 | 来源:发表于2016-11-11 11:57 被阅读175次

    前言


    PHP 提供了大量的扩展以供使用,这使许多底层功能,甚至是与其他程序交互的接口,都得到了封装,开发者可以很方便的直接使用。
    curl就是其中之一。
    有了curl扩展,我们只需要使用少数几个函数就可以完成一次网络通信,我们不需要去TCP上开一条通道出来,甚至去监听通信状态。

    一张图,说说PHP的CURL


    PHP CURL.png

    可能刚入门的时候,各种各样的文章,教程,会让人有些乱。但不要慌,其实总结下来,也就那么回事。只是设置不同的参数,来达到不同的效果而已。
    理一张图,让给脑子清晰一点。
    我想,应该没有人能够把函数记得十分清晰,所以,还是得看看手册。
    PHP官方CURL参考手册

    说好的从0到1


    <?php 
    // +----------------------------------------------------------------------
    // | OCMS v1.1 http://blog.vsonweb.com
    // +----------------------------------------------------------------------
    // | Copyright (c) 2016 VSONWEB All rights reserved.
    // +----------------------------------------------------------------------
    // | File: Curl.class.php Curl工具类
    // +----------------------------------------------------------------------
    // | Author: Object <2252390865@qq.com>
    // +----------------------------------------------------------------------
    // | Date: 2016年11月10日
    // +----------------------------------------------------------------------
    
    class Curltool{
        public $header; // 请求头
    
        public function __construct($header = array()){
            if (empty($header)) {
                $this->header[] = "Accept : text/javascript, application/javascript, application/ecmascript, application/x-ecmascript, */*; q=0.01";
                // $this->header[] = "Accept-Encoding : gzip, deflate, br";
                $this->header[] = "Accept-Language : zh,zh-CN;q=0.8,en-US;q=0.5,en;q=0.3";
                $this->header[] = "Referer : http://blog.vsonweb.com";
                $this->header[] = "User-Agent : Mozilla/5.0 (Windows NT 6.1; WOW64; rv:49.0) Gecko/20100101 Firefox/49.0";
                // $this->header[] = "content-type: application/x-www-form-urlencoded; charset=UTF-8";
            }
        }
    
        /**
         * 发送GET请求
         * @author  Object
         * @date    2016-11-10
         * @param   string      $url    请求地址
         * @return      mixed
         *
         * 使用案例 :
         * 
         *         include_once 'Curl.class.php';
         *  $curl = new Curltool();
         *  $c = $curl->sendGet('https://blog.vsonweb.com');
         *  $c['content'] = htmlspecialchars($c['content']); // 转义输出
         *  p($c);
         *  
         */
        public function sendGet($url){
            $ch = curl_init(); // 创建一个curl句柄
            curl_setopt($ch,CURLOPT_HTTPHEADER,$this->header); // 设置请求头
    
            if (preg_match("#^https://#i",$url) == 1) {
                # https时,不严格认证
                curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false); // 不自动验证证书,则信任任何证书
                curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,2); // 检查证书中是否设置域名, 该值不能填true和1,要用2来代替。
    
                # https时,严格校验证书
                /*
                curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);   // 只信任CA颁布的证书 
                curl_setopt($ch, CURLOPT_CAINFO, $cacert); // CA根证书(用来验证的网站证书是否是CA颁布) 
                curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); // 检查证书中是否设置域名,并且是否与提供的主机名匹配  
                */
            }
    
            curl_setopt($ch,CURLOPT_URL,$url); // 设置请求地址
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // 设置 curl_exec 时,以字符串接收返回的信息,不直接输出
    
            $data['content'] = curl_exec($ch); // 执行请求
            $data['getinfo'] = curl_getinfo($ch); // 获取请求状态
            curl_close($ch); // 释放请求资源
    
            if ($data['getinfo']['http_code'] == 200) {
                return $data; // 注意:此处返回数据的格式,可能是json,也可能是文本接收处可另行转换
            }else{
                return false;
            }
        }
    
        /**
         * 发送POST请求
         * @author  Object
         * @date    2016-11-11
         * @param   string          $url        请求地址
         * @param   array       $params     post参数
         * @return  mixed
         */
        public function sendPost($url,$params = array()){
            $ch = curl_init();
    
            if (preg_match("#^https://#i",$url) == 1) {
                # https时,不严格认证
                curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false); // 不自动验证证书,则信任任何证书
                curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,2); // 检查证书中是否设置域名, 该值不能填true和1,要用2来代替。
    
                # https时,严格校验证书
                /*
                curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);   // 只信任CA颁布的证书 
                curl_setopt($ch, CURLOPT_CAINFO, $cacert); // CA根证书(用来验证的网站证书是否是CA颁布) 
                curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); // 检查证书中是否设置域名,并且是否与提供的主机名匹配  
                */
            }
    
            curl_setopt($ch,CURLOPT_URL,$url);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // 字符串形式返回
            curl_setopt($ch, CURLOPT_POST, true); // 设置为post请求
            curl_setopt($ch,CURLOPT_POSTFIELDS,$params); // 设置post附带参数
    
            $data['content'] = curl_exec($ch); // 执行请求
            $data['getinfo'] = curl_getinfo($ch); // 获取请求状态
            curl_close($ch); // 释放请求资源
    
            if ($data['getinfo']['http_code'] == 200) {
                return $data; // 注意:此处返回数据的格式,可能是json,也可能是文本接收处可另行转换
            }else{
                return false;
            }
        }
    }
    ?>
    

    注释比代码还多……因为这是对自己最好的学习方式。

    结语


    curl在开发项目中的应用,咱不多说了,总之很常见,特别是在这个互联网共享经济时代,以供调用的接口数不胜数。
    上述的代码,只是一个比较简单的案例,以供入门。

    本文出自半醒的狐狸博客

    相关文章

      网友评论

        本文标题:7,CURL工具类

        本文链接:https://www.haomeiwen.com/subject/bbhfpttx.html