fablefe 发表于 2018-12-22 12:45:52

一个简单PHP CURL类

  这里要说明一下...这个类的形成是参考了晚上前辈们的代码加上我自己的理解见解而集成的...前辈们的代码出处已经忘记了
  我在这里感谢这些前辈们给我的启发...希望这个类能给大家带来帮助...如果有不足的地方...请大家多多指点指点

  这是一个PHP CURL的类
  public $cookieFile;                     //cookie存放路径
public $loginUrl;                        //登录链接
public $loginFields;                  //登录参数
public $targetUrl;                  //目标地址
public $targetFields;                //目标参数
  这里是要说明的几个参数

  $cookieFile保存的是CURL获取回来的COOKIE的文件存放的位置
  $loginUrl;模拟登陆时用的链接
  $loginFields;模拟登录时用到的参数 如账号密码等
   $targetUrl; 模拟提交,获取时用到的地址
  $targetFields;模拟提交时用到的参数
  用法简介
  $curl=new curl($cookieFile); //初始化时载入COOKIE保存位置
  //模拟登录
  $curl->loginUrl="http://www.xxx.com";      //登录链接

  $curl->loginFields="username=xxx&pwd=xxx";   //登录参数
  $curl->curlLogin($ref,$header);    //$ref 伪造来源地址 $header 伪造头部和IP信息
  //模拟获取
  
  $curl->targetUrl="http://www.xxx.com";      //目标链接

  $curl->curGet($ref,$header);                //$ref 伪造来源地址 $header 伪造头部和IP信息
  //模拟提交

  $curl->targetUrl="http://www.xxx.com";      //目标链接

  $curl->targetFields="username=xxx&pwd=xxx";   //提交参数
  $curl->curlPost($ref,$header);    //$ref 伪造来源地址 $header 伪造头部和IP信息
  

  ====================Curl.class.php PHP代码如下=====================================================================

  class curl{
    public $cookieFile;                  //cookie存放路径
    public $loginUrl;                  //登录链接
    public $loginFields;                //参数
    public $targetUrl;                  //目标地址
    public $targetFields;                //目标参数


    function __construct(){
      $this->cookieFile='cookie.txt';
    }

    //模拟登录
    function curlLogin($ref="",$head=""){
      if($ref==""){
            $referer="http://www.baidu.com/";
      }
      else{
            $referer=$ref;
      }
      if($head==""){
            $header=$this->randIP();
      }
      else{
            $header=array_merge($head,$this->randIP());
      }
      $curl = curl_init();                                                 // 启动一个CURL会话   
          curl_setopt($curl, CURLOPT_URL, $this->loginUrl);                     // 要访问的地址
      curl_setopt($curl, CURLOPT_HTTPHEADER , $header ) ;                  // 伪造访问IP
      curl_setopt($curl, CURLOPT_REFERER, $referer);                         // 伪造来路      
          curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);                         // 对认证证书来源的检查   
          curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 1);                         // 从证书中检查SSL加密算法是否存在   
          curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); // 模拟用户使用的浏览器   
          curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);                         // 使用自动跳转   
          curl_setopt($curl, CURLOPT_AUTOREFERER, 1);                         // 自动设置Referer   
          curl_setopt($curl, CURLOPT_POST, 1);                                 // 发送一个常规的Post请求   
         curl_setopt($curl, CURLOPT_POSTFIELDS, $this->loginFields);         // Post提交的数据包   
          curl_setopt($curl, CURLOPT_COOKIEJAR, $this->cookieFile);             // 存放Cookie信息的文件名称   
          curl_setopt($curl, CURLOPT_COOKIEFILE, $this->cookieFile);             // 读取上面所储存的Cookie信息   
          curl_setopt($curl, CURLOPT_TIMEOUT, 300);                           // 设置超时限制防止死循环   
          curl_setopt($curl, CURLOPT_HEADER, 0);                                 // 显示返回的Header区域内容   
          curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);                         // 获取的信息以文件流的形式返回   
          $tmpInfo = curl_exec($curl);                                       // 执行操作   
          if (curl_errno($curl)) {   
             echo 'Errno'.curl_error($curl);   
          }   
          curl_close($curl);                                                   // 关闭CURL会话   
          return $tmpInfo;                                                   // 返回数据
    }

    //模拟获取数据
    function curlGet($ref="",$head=""){
      if($ref==""){
            $referer="http://www.baidu.com/";
      }
      else{
            $referer=$ref;
      }
      if($head==""){
            $header=$this->randIP();
      }
      else{
            $header=array_merge($head,$this->randIP());
      }
      $curl = curl_init();                                                 // 启动一个CURL会话   
          curl_setopt($curl, CURLOPT_URL, $this->targetUrl);                     // 要访问的地址   
      curl_setopt($curl, CURLOPT_HTTPHEADER , $header);                     // 伪造访问IP
      curl_setopt($curl, CURLOPT_REFERER, $referer);                         // 伪造来路            
          curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);                         // 对认证证书来源的检查   
          curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 1);                         // 从证书中检查SSL加密算法是否存在   
          curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); // 模拟用户使用的浏览器   
          curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);                         // 使用自动跳转   
          curl_setopt($curl, CURLOPT_AUTOREFERER, 1);                         // 自动设置Referer   
          curl_setopt($curl, CURLOPT_HTTPGET, 1);                           // 发送一个常规的GET请求   
          curl_setopt($curl, CURLOPT_COOKIEFILE, $this->cookieFile);             // 读取上面所储存的Cookie信息   
          curl_setopt($curl, CURLOPT_TIMEOUT, 300);                           // 设置超时限制防止死循环   
          curl_setopt($curl, CURLOPT_HEADER, 0);                                 // 显示返回的Header区域内容   
          curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);                         // 获取的信息以文件流的形式返回   
          $tmpInfo = curl_exec($curl);                                       // 执行操作   
          if (curl_errno($curl)) {   
             echo 'Errno'.curl_error($curl);   
          }   
          curl_close($curl);                                                   // 关闭CURL会话   
          return $tmpInfo;                                                   // 返回数据
    }

    //模拟提交数据
    function curlPost($ref="",$head=""){
      if($ref==""){
            $referer="http://www.baidu.com/";
      }
      else{
            $referer=$ref;
      }
      if($head==""){
            $header=$this->randIP();
      }
      else{
            $header=array_merge($head,$this->randIP());
      }
      $curl = curl_init();                                                 // 启动一个CURL会话   
          curl_setopt($curl, CURLOPT_URL, $this->targetUrl);                     // 要访问的地址      
      curl_setopt($curl, CURLOPT_HTTPHEADER , $header);                      // 伪造访问IP
      curl_setopt($curl, CURLOPT_REFERER, $referer);                      // 伪造来路         
          curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);                         // 对认证证书来源的检查   
          curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 1);                         // 从证书中检查SSL加密算法是否存在   
          curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); // 模拟用户使用的浏览器   
          curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);                         // 使用自动跳转   
          curl_setopt($curl, CURLOPT_AUTOREFERER, 1);                         // 自动设置Referer   
          curl_setopt($curl, CURLOPT_POST, 1);                                 // 发送一个常规的Post请求
      curl_setopt($curl, CURLOPT_POSTFIELDS, $this->targetFields);         // Post提交的数据包   
          curl_setopt($curl, CURLOPT_COOKIEFILE, $this->cookieFile);             // 读取上面所储存的Cookie信息   
          curl_setopt($curl, CURLOPT_TIMEOUT, 300);                           // 设置超时限制防止死循环   
          curl_setopt($curl, CURLOPT_HEADER, 0);                                 // 显示返回的Header区域内容   
          curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);                         // 获取的信息以文件流的形式返回   
          $tmpInfo = curl_exec($curl);                                       // 执行操作   
          if (curl_errno($curl)) {   
             echo 'Errno'.curl_error($curl);   
          }   
          curl_close($curl);                                                   // 关闭CURL会话   
          return $tmpInfo;                                                   // 返回数据
    }

    //随机生成IP
    function randIP(){
      $ip_long = array(
            array('607649792', '608174079'), //36.56.0.0-36.63.255.255
            array('1038614528', '1039007743'), //61.232.0.0-61.237.255.255
            array('1783627776', '1784676351'), //106.80.0.0-106.95.255.255
            array('2035023872', '2035154943'), //121.76.0.0-121.77.255.255
            array('2078801920', '2079064063'), //123.232.0.0-123.235.255.255
            array('-1950089216', '-1948778497'), //139.196.0.0-139.215.255.255
            array('-1425539072', '-1425014785'), //171.8.0.0-171.15.255.255
            array('-1236271104', '-1235419137'), //182.80.0.0-182.92.255.255
            array('-770113536', '-768606209'), //210.25.0.0-210.47.255.255
            array('-569376768', '-564133889'), //222.16.0.0-222.95.255.255
      );
      $rand_key = mt_rand(0, 9);
      $ip= long2ip(mt_rand($ip_long[$rand_key], $ip_long[$rand_key]));
      $headers['CLIENT-IP'] = $ip;
      $headers['X-FORWARDED-FOR'] = $ip;

      $headerArr = array();
      foreach( $headers as $n => $v ) {
            $headerArr[] = $n .':' . $v;
      }
      return $headerArr;   
    }

}



页: [1]
查看完整版本: 一个简单PHP CURL类