博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
curl类封装
阅读量:6920 次
发布时间:2019-06-27

本文共 6196 字,大约阅读时间需要 20 分钟。

ch = curl_init();          $this->url = $url ? $url : $this->url;        //$this->set_useragent = $_SERVER['HTTP_USER_AGENT']; // 模拟用户使用的浏览器           $this->set_useragent ="Mozilla/5.0 (iPhone; CPU iPhone OS 6_1_4 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/7.0 Mobile/10B350 Safari/9537.53";        // $this->set_useragent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.143 Safari/537.36";        //$this->cookie_file=dirname(__FILE__)."/cookie_".md5(basename(__FILE__)).".txt";    //初始化cookie文件路径         //$this->cookie_file= SAE_TMP_PATH.TmpFS;        $this->cookie_file = "saekv://cookie_2014.txt";    }      //关闭curl    public function close(){          curl_close($this->ch);      }      //析构函数      public function __destruct(){          $this->close();      }          //设置超时       public function set_time_out($timeout=20){          if(intval($timeout) != 0)               $this->set_time_out = $timeout;        return $this;    }      //设置来源页面      public function set_referer($referer = ""){          if (!empty($referer))              curl_setopt($this->ch, CURLOPT_REFERER , $referer);          return $this;      }    //设置cookie存放模式 1客户端、2服务器文件      public function set_cookie_mode($mode = ""){          $this->cookie_mode = $mode;        return $this;    }    //载入cookie      public function load_cookie(){               if($this->cookie_mode == 1 ) {            if(isset($_COOKIE['curl'])){                curl_setopt($this->ch,CURLOPT_COOKIE,$_COOKIE['curl']);            }else{                $this->exec();                curl_setopt($this->ch,CURLOPT_COOKIE,$this->cookie_file);            }                     }        if($this->cookie_mode == 2 ) {                       curl_setopt($this->ch, CURLOPT_COOKIEFILE , $this->cookie_file);                     }        if($this->cookie_mode == 3 ) {            $kv = new SaeKV();            $ret = $kv->init();            $ret = $kv->get('curl_cookie');            if($ret)               curl_setopt($this->ch,CURLOPT_COOKIE, $ret);                     }        return $this;      }          //设置保存cookie方式 $cookie_val 模式1为变量 模式2为文件路径    public function save_cookie($cookie_val = "") {          //保存在客户端        if($this->cookie_mode == 1 && $cookie_val){           setcookie('curl',$cookie_val);         }        //保存服务器端        if($this->cookie_mode == 2){             if(!empty($cookie_val))                 $this->cookie_file =  $cookie_val;            curl_setopt($this->ch, CURLOPT_COOKIEJAR , $this->cookie_file);          }        //保存在sae        if($this->cookie_mode == 3 && $cookie_val){             $kv = new SaeKV();             $ret = $kv->init();             $ret = $kv->get('curl_cookie');            if($ret){                $ret = $kv->set('curl_cookie', $cookie_val );                             }else{                 $ret = $kv->add('curl_cookie', $cookie_val);                         }        }                          return $this;               }      //post参数 (array) $post     public function post ($post = ""){          if($post && is_array($post)){            curl_setopt($this->ch, CURLOPT_POST , 1);              curl_setopt($this->ch, CURLOPT_POSTFIELDS , $post );          }        return $this;      }      //设置代理 ,例如'68.119.83.81:27977'      public function set_proxy($proxy = ""){        if($proxy){             curl_setopt($this->ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5);              curl_setopt($this->ch, CURLOPT_PROXY,$proxy);         }                   return $this;      }      //设置伪造ip      public function set_ip($ip=""){          if(!empty($ip))              curl_setopt($this->ch, CURLOPT_HTTPHEADER, array("X-FORWARDED-FOR:$ip", "CLIENT-IP:$ip"));          return $ip;      }      //设置是否显示返回头信息    public function show_header($show=0){        $this->show_header = 0;          if($show)             $this->show_header = 1;         return $this;      }      //设置请求头信息    public function set_useragent($str=""){          if($str)              $this->set_useragent = $str;          return $this;      }            //执行      public function exec ($url = ""){          if(!$url) $url = $this->url;        curl_setopt($this->ch, CURLOPT_URL, $url); // 要访问的地址        curl_setopt($this->ch, CURLOPT_SSL_VERIFYPEER, 0); // 对认证证书来源的检查           curl_setopt($this->ch, CURLOPT_RETURNTRANSFER , 1 );    //获取的信息以文件流的形式返回             curl_setopt($this->ch, CURLOPT_SSL_VERIFYHOST, 1); // 从证书中检查SSL加密算法是否存在          curl_setopt($this->ch, CURLOPT_USERAGENT, $this->set_useragent); // 模拟用户使用的浏览器              curl_setopt($this->ch, CURLOPT_FOLLOWLOCATION, 1); // 使用自动跳转              curl_setopt($this->ch, CURLOPT_AUTOREFERER, 1); // 自动设置Referer         curl_setopt($this->ch, CURLOPT_TIMEOUT, $this->set_time_out);  //超时设置        curl_setopt($this->ch, CURLOPT_HEADER, $this->show_header); // 显示返回的Header区域内容        curl_setopt($this->ch, CURLOPT_NOBODY, 0);//不返回response body内容                  $res = curl_exec($this->ch);        $this->flag_if_have_run = true;        if (curl_errno($this->ch)) {                  //echo 'Errno'.curl_error($this->ch);              return false;                   }         if($this->show_header == 1){ //数组形式返回头信息和body信息             list($header, $body) = explode("\r\n\r\n", $res);            $arr['header'] = $header;            $arr['body'] = $body;            if($this->cookie_mode == 1 || $this->cookie_mode == 3){                  preg_match_all("/set\-cookie:([^\r\n]*)/i", $header, $matches);                //print_r($matches);                if($matches && isset($matches[1]) ){                    $val = implode(';',array_unique(explode(';',implode(';',$matches[1])))); //去重处理                    if($val)                      $this->save_cookie($val); //设置客户端保存cookie                }            }            if($arr) return $arr;        }                 return $res;      }                //返回  curl_getinfo信息    public function get_info(){          if($this->flag_if_have_run == true )              return curl_getinfo($this->ch);          else              throw new Exception("

需先运行( 执行exec ),再获取信息

");      }        }  ?>

 

转载于:https://www.cnblogs.com/yhdsir/p/5693637.html

你可能感兴趣的文章
android 探索首选项框架 ListPreference
查看>>
自己应用工具的分享
查看>>
Xmanager注册激活技巧讲解
查看>>
gogoproto一睹为快
查看>>
LVM 增加磁盘扩容
查看>>
java.util.concurrent.ExecutionException: org.ap...
查看>>
git ssh免密配置
查看>>
面试题(12)
查看>>
WordPress超级文本小工具:Enhanced Text Widget
查看>>
Linux文件系统简介
查看>>
eclipse下安装m2e的maven插件报错的各类解决方案(含pom editor没装好的解决方案)
查看>>
java23中设计模式——创建模式——singleton(单列)
查看>>
【微信小程序开发】来看看,那些年我们踩过的坑~
查看>>
微信小程序联盟:官方文档+精品教程+demo集合(6月16日更新,持续更新中……)...
查看>>
重载new与delete
查看>>
MySQL管理与优化(9):存储过程和函数
查看>>
Java程序员须知的七个日志管理工具
查看>>
mac 下安装编译 yasm
查看>>
Eclipse更改maven项目名
查看>>
Android:资源 id 及资源 id 的动态获取
查看>>