程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> php使用curl抓取qq空間的訪客信息示例

php使用curl抓取qq空間的訪客信息示例

編輯:關於PHP編程

     這篇文章主要介紹了php使用curl抓取qq空間的訪客信息示例,需要的朋友可以參考下

    config.php  代碼如下: <?php define('APP_DIR', dirname(__FILE__)); define('COOKIE_FILE', APP_DIR . '/app.cookie.txt'); //會話記錄文件 define('VISITOR_CAPTURE_INTERVAL', 3); //QQ采集間隔 define('VISITOR_DATA_UPLOAD_INTERVAL', ''); define('THIS_TIME', time());   define('REQUEST_TIMEOUT', 20); //請求超時20秒 define('END_LINE', "n"); define('DEBUG', true); //開啟調試   $login_users = array(     array('user' => '2064556526', 'password' => '909124951'),     array('user' => '483258700', 'password' => '909124951'),     array('user' => '1990270522', 'password' => '909124951'),     array('user' => '2718711637', 'password' => '909124951'),     array('user' => '2841076562', 'password' => '909124951'), );       qy.visitor.php    代碼如下: <?php include('./config.php'); include(APP_DIR . '/qy.visitor.php');   $sessions = array(); $user = $login_users[array_rand($login_users)];   $visitor_capture = new QQVisitorCapture($user['user'], $user['password'], COOKIE_FILE, REQUEST_TIMEOUT, DEBUG, END_LINE);   $visitors = $visitor_capture->getVisitorInfo();   if (empty($visitors)) {     $this->clearCookies(true); } else {     $cckf_service = new CCKFService(SECURITY_KEY,SERVICE_ID,SERVICE_ADDRESS,'', REQUEST_TIMEOUT, DEBUG, END_LINE); }       qy.class.php 代碼如下: <?php     class Trace {     public static function nl($num = 1)     {         $str = '';         for ($i = 0; $i < $num; $i++) {             $str .= "n";         }         return $str;     }       public static function br($num = 1)     {         $str = '';         for ($i = 0; $i < $num; $i++) {             $str .= "<br/>";         }         return $str;     }       public static function write($content, $end_line, $title = null)     {         $close = '^^^^^^^^^^^^^^^^^';           if ($title) {             $start = '--------' . $title . '---------';         } else {             $start = '-----------------';         }           echo $start . $end_line;           if (is_array($content)) {             print_r($content);             echo $end_line;         } else {             echo $content;             echo $end_line;         }           if (empty($content)) {             echo $end_line;         } else {             echo $close . $end_line;         }     }   }     class Utils {       public static function getMicroTime()     {         list($mic, $time) = explode(" ", microtime());         return intval($time) + floatval(sprintf('%.3f', $mic));     }       public static function getUTCMilliseconds()     {         return round(rand(1, 9) / 10 * 2147483647) * round(1, 999) % 10000000000;     }       public static function decodeURIComponent($content)     {         return urldecode(preg_replace("/x([0-9a-z]{2,3})/i", "%$1", $content));     }       public static function  jsRandom()     {         list($mic, $time) = explode(" ", microtime());         return $mic;     }       function loginJsTime()     {         list($mic, $time) = explode(" ", microtime());         return $time . sprintf('%3d', $mic * 1000);       }       protected static function utf8_unicode($c)     {         switch (strlen($c)) {             case 1:                 return ord($c);             case 2:                 $n = (ord($c[0]) & 0x3f) << 6;                 $n += ord($c[1]) & 0x3f;                 return $n;             case 3:                 $n = (ord($c[0]) & 0x1f) << 12;                 $n += (ord($c[1]) & 0x3f) << 6;                 $n += ord($c[2]) & 0x3f;                 return $n;             case 4:                 $n = (ord($c[0]) & 0x0f) << 18;                 $n += (ord($c[1]) & 0x3f) << 12;                 $n += (ord($c[2]) & 0x3f) << 6;                 $n += ord($c[3]) & 0x3f;                 return $n;         }     }       public static function  getGTK($str)     {         $hash = 5381;         for ($i = 0, $len = strlen($str); $i < $len; ++$i) {             $hash += ($hash << 5) + self::utf8_unicode($str[$i]);         }         return $hash & 2147483647;     }       protected static function hexchar2bin($str)     {         $arr = '';         $temp = null;         for ($i = 0; $i < strlen($str); $i = $i + 2) {             $arr .= "x" . substr($str, $i, 2);         }         eval('$temp="' . $arr . '";');         return $temp;     }       protected static function getUid($uid)     {         $temp = null;         eval('$temp="' . $uid . '";');         return $temp;     }       public static function getEncryption($password, $uin, $vcode)     {         $uin = self::getUid($uin);         $str1 = self::hexchar2bin(strtoupper(md5($password)));         $str2 = strtoupper(md5($str1 . $uin));         return strtoupper(md5($str2 . strtoupper($vcode)));     }   }   class CookieFileExtract {     protected $cookie_file;     protected $cookie_list;       protected function  __construct($cookie_file)     {         $this->cookie_file = $cookie_file;           $this->cookie_list = $this->extractFile();     }       protected function isValidateCookieFile()     {         if ($this->cookie_file && file_exists($this->cookie_file)) {             return true;         } else {             return false;         }     }       protected function extractFile()     {         $cookie_list = array();           if ($this->isValidateCookieFile($this->cookie_file)) {             $content = file($this->cookie_file);             if (is_array($content)) {                 foreach ($content as $line) {                     $line = trim($line);                     if (strlen($line) > 0 && $line[0] != '#') {                         $cookie = (preg_split("/s+/", $line));                         if (count($cookie) == 7) {                             $cookie_list[$cookie[5]] = $cookie[6];                         } else {                             $cookie_list[$cookie[5]] = '';                         }                     }                 }             }         }           return $cookie_list;     }       protected function buildCookieStr($cookies)     {         $arr = array();           if (is_array($cookies)) {             foreach ($cookies as $k => $cookie) {                 $line = $cookie['domain'] . "t" . "TRUE" . "t" . $cookie['path'] . "t" . "FALSE" . "t" . $cookie['expires'] . "t" . $k . "t" . $cookie['value'];                 $arr[] = $line;             }         }         return $arr;     }       protected function __setCookies($cookies)     {         $new_line = array();         if (is_array($cookies)) {             if ($this->isValidateCookieFile($this->cookie_file)) {                 $content = file($this->cookie_file);                 if (is_array($content)) {                     foreach ($content as $line) {                         $line = trim($line);                         if (strlen($line) > 0 && $line[0] != '#') {                             $cookie = (preg_split("/s+/", $line));                             if (!in_array($cookie[5], $cookies)) {                                 $new_line[] = $line;                             }                         } else {                             $new_line[] = $line;                         }                     }                 }             }               file_put_contents($this->cookie_file, implode("n", array_merge($new_line, $this->buildCookieStr($cookies))));         }     }       protected function __getAllCookies($refresh = false)     {         if ($refresh) {             $this->cookie_list = $this->extractFile();         }         return $this->cookie_list;     }       protected function __getCookie($cookie_name, $refresh = false)     {         $cookie_list = $this->__getAllCookies($refresh);           if (is_array($cookie_list) && array_key_exists($cookie_name, $cookie_list)) {             return $cookie_list[$cookie_name];         } else {             return null;         }     }       protected function __clearAllCookies()     {         $this->cookie_list = null;         @unlink($this->cookie_file);     } }   class BaseRequest extends CookieFileExtract {       protected $curl_instance;     protected $request_timeout;     protected $debug;     protected $end_line;     protected $user_agent = 'Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:26.0) Gecko/20100101 Firefox/26.0';       protected function __construct($cookie_file, $request_timeout, $debug, $end_line)     {         parent::__construct($cookie_file);         $this->request_timeout = $request_timeout;         $this->debug = $debug;         $this->end_line = $end_line;         $this->initInstance();     }       protected function initInstance()     {           $this->curl_instance = curl_init();           if ($this->isValidateCookieFile()) {             curl_setopt($this->curl_instance, CURLOPT_COOKIEJAR, $this->cookie_file);             curl_setopt($this->curl_instance, CURLOPT_COOKIEFILE, $this->cookie_file);         }           curl_setopt($this->curl_instance, CURLOPT_TIMEOUT, $this->request_timeout);         curl_setopt($this->curl_instance, CURLOPT_RETURNTRANSFER, 1);         curl_setopt($this->curl_instance, CURLOPT_HEADER, 1);         curl_setopt($this->curl_instance, CURLOPT_SSL_VERIFYPEER, false);         curl_setopt($this->curl_instance, CURLOPT_SSL_VERIFYHOST, 0);         curl_exec($this->curl_instance);       }       function setCookies($cookies)     {         $this->closeInstance();         $this->__setCookies($cookies);         $this->initInstance();     }       protected function getAllCookies($refresh = false)     {         $this->closeInstance();         $cookies = $this->__getAllCookies($refresh);         $this->initInstance();         return $cookies;     }         protected function clearAllCookies($refresh = false)     {         $this->closeInstance();         $this->__clearAllCookies();           if ($refresh) {             $this->initInstance();         }     }       protected function getCookie($name, $refresh = false)     {         $this->closeInstance();         $cookie = $this->__getCookie($name, $refresh);         $this->initInstance();         return $cookie;     }       protected function getRequestInstance()     {         return $this->curl_instance;     }       protected function closeInstance()     {         if (is_resource($this->curl_instance)) {             curl_close($this->curl_instance);         }     }       protected function resetInstance()     {         $this->closeInstance();         @unlink($this->cookie_file);         $this->initInstance();     }       protected function requestExec($option)     {           curl_setopt_array($this->getRequestInstance(), $option);           //if ($this->debug) {         //    $result = curl_exec($this->getRequestInstance());         //    Trace::write($result, $this->end_line, 'request output');         //} else {         return curl_exec($this->getRequestInstance());         //}     } }   class QQVisitorRequest extends BaseRequest {     protected $user;     protected $password;       protected function __construct($user, $password, $cookie_file, $request_timeout, $debug, $end_line)     {           parent::__construct(dirname($cookie_file) . '/' . $user . '.' . basename($cookie_file), $request_timeout, $debug, $end_line);         $this->user = $user;         $this->password = $password;     } }     class ResultExtract {       public static function  getCoreJsInfo($content, $user)     {         $arr = array();         preg_match('/cfgs*=s*{(.*?)s*}s*,s*URL_PARAM_HASH/s', $content, $m);         if (count($m) > 0) {             $f = preg_replace('/s*/', '', $m[1]);             $f = preg_replace('/"+g_iLoginUin+"/', $user, $f);             $f = preg_replace('/$j.cookie.get("hotfeeds_closed")==1?"":/', '', $f);               $f = explode(",", $f);             if (count($f) > 0) {                 foreach ($f as $t) {                     $t = trim($t);                     $p = strpos($t, ':');                     $key = trim(substr($t, 0, $p), '"');                     $value = trim(substr($t, $p + 1), '"');                     if ($key) {                         $arr[$key] = $value;                     }                 }                   if (count($arr) > 0) {                     $arr['visitor'] = $arr;                 }             }         }           return $arr;     }       public static function  enterQzoneSuccess($content)     {         $arr = array();         $arr2 = array();         preg_match('/g_Datas*=s*{s*feedsPart1s*:s*(.*?)s*,s*feedsPart2/s', $content, $m);           if (count($m) > 0) {             $f = preg_replace('/s*/', '', $m[1]);             $f = preg_replace('/([{,])([^,]*?)(:)/', '$1"$2"$3', $f);             $f = preg_replace('/:'(.*?)'([,}])/', ':"$1"$2', $f);             $arr = json_decode($f, true);             $arr = $arr['main'];         }           preg_match('/g_type.*?g_IZone_Flag/s', $content, $m);           if (count($m) > 0) {             $f = preg_replace('/s*/', '', $m[0]);             $f = explode(",", $f);               foreach ($f as $t) {                 $t = trim($t);                 $p = strpos($t, '=');                 $key = trim(substr($t, 0, $p));                 $value = trim(substr($t, $p + 1), '"');                 if ($key) {                     $arr2[$key] = $value;                 }             }         }           return array_merge($arr, $arr2);       }       public static function getLoginJsInfo($content)     {           $s = preg_replace('/.*?pt.plogins*=s*{(.*?)aqScanLink.*/s', '$1', $content);         preg_match('/.*js_types*:s*(d+)s*,.*/', $s, $m);           if (count($m) > 1) {             return array('js_type' => $m[1]);         }           return array();     }       public static function getLoginAddress($content)     {         preg_match('/.*?<s*iframes*ids*=s*"login_frame"s*names*=s*"login_frame".*?srcs*=s*"(.*?xui.ptlogin2.qq.com.*?)".*?>s*</iframe>.*?/', $content, $m);           if (count($m) > 1) {             return html_entity_decode($m[1]);         }         return null;     }       public static function checkLoginSuccess($content)     {           preg_match_all('/.*?((.*)).*?/', $content, $match);         if ($match[1][0]) {             $g = explode(',', $match[1][0]);             if (count($g) > 1) {                 if (($g[count($g) - 2]) == "'登錄成功!'") {                     $url_parts = parse_url($g[2]);                     parse_str($url_parts['query'], $arr);                     if (array_key_exists('ptsig', $arr)) {                         $ptsig = $arr['ptsig'];                     } else {                         $ptsig = null;                     }                     return array('status' => true, 'value' => array('url' => $g[2], 'ptsig' => $ptsig));                 }             }         }         return array('status' => false);     }         public static function rightFrameVisitors($content)     {         $visitor_list = array();         $f = preg_replace('/s*/', '', $content);         $f = preg_replace('/.*?_Callback(({.*?})).*?/', '$1', $f);         $f = json_decode($f, true);           if (is_array($f) && count($f) > 0 && array_key_exists('data', $f)             && array_key_exists('module_3', $f['data'])             && array_key_exists('data', $f['data']['module_3'])             && array_key_exists('items', $f['data']['module_3']['data'])         ) {               $visitors = $f['data']['module_3']['data']['items'];               foreach ($visitors as $visitor) {                   if (!array_key_exists('loc', $visitor)) {                     $visitor_list [] = array(                         'uin' => $visitor['uin'], 'name' => $visitor['name'], 'online' => $visitor['online'], 'time' => $visitor['time'],                         'img' => $visitor['img'], 'yellow' => $visitor['yellow'], 'supervip' => $visitor['supervip'],                     );                 }             }         }           return $visitor_list;     }       public static function getVisitors($content)     {           $f = preg_replace('/s*/', '', $content);         preg_match('/^.*?({.*?}));s*$/', $f, $m);           $visitor_list = array();           if (is_array($m) && count($m) > 1 && strlen($m[1]) > 0) {             $visitors = json_decode(trim($m[1]), true);               if (array_key_exists('data', $visitors) && array_key_exists('items', $visitors['data'])) {                   foreach ($visitors['data']['items'] as $visitor) {                       if ($visitor['name']) {                         $_ = array(                             'uin' => $visitor['uin'], 'name' => $visitor['name'], 'time' => $visitor['time'],                             'yellow' => $visitor['yellow'], 'supervip' => $visitor['supervip'],                         );                         if (array_key_exists('portraitlabel', $visitor)) {                             $_['portraitlabel'] = $visitor['portraitlabel'];                         }                         $visitor_list[] = $_;                           if (array_key_exists('uins', $visitor)) {                             foreach ($visitor['uins'] as $uins) {                                 $_ = array(                                     'uin' => $uins['uin'], 'name' => $uins['name'], 'time' => $uins['time'],                                     'yellow' => $uins['yellow'], 'supervip' => $uins['supervip'],                                 );                                   if (array_key_exists('portraitlabel', $uins)) {                                     $_['portraitlabel'] = $uins['portraitlabel'];                                 }                                 $visitor_list[] = $_;                             }                         }                     }                 }             }         }         return $visitor_list;     }       public static function  checkVC($content)     {         preg_match_all('/.*?((.*)).*?/', $content, $match);           if (strlen($match[1][0]) > 1) {             $m = str_replace("'", '', $match[1][0]);             $g = explode(',', $m);               if (count($g) == 3) {                 return array('saltUin' => $g[2], 'verifycode' => $g[1], 'RSAKey' => $g[2] ? false : true);             }         }         return array();     }       public static function getLoginInfo($content)     {         $s = preg_replace('/.*?pt.ptuis*=s*{(.*?)}s*;.*/s', '$1', $content);         $e = preg_split('/,s*/', trim($s));           $info = array();           foreach ($e as $t) {               $t = trim($t);             $p = strpos($t, ':');             $key = trim(substr($t, 0, $p));             $value = trim(substr($t, $p + 1));               if (preg_match('/encodeURIComponent/', $value)) {                 $value = preg_replace('/^encodeURIComponents*(s*"(.*)?"s*)s*,?$/', '$1', $value);             } else {                 $value = trim($value, '",');             }               if ($key) {                 $info[$key] = urldecode($value);             }         }         return $info;     }   }     class QQVisitorCapture extends QQVisitorRequest {       public function __construct($user, $password, $cookie_file, $request_timeout, $debug, $end_line)     {         parent:: __construct($user, $password, $cookie_file, $request_timeout, $debug, $end_line);     }       public function trace($content, $title)     {         if ($this->debug = true) {             Trace:: write($content, $this->end_line, $title);         }     }       public function error($message)     {         $this->trace($message, 'login error ');         return false;     }       public function success()     {         return true;     }       public function getGTKEncryption()     {         return Utils ::getGTK($this->getCookie('skey', true));     }       public function getCookies($refresh = false)     {         return $this->getAllCookies($refresh);     }       public function clearCookies($refresh = false)     {         return $this->clearAllCookies($refresh);     }       public function login()     {         $login_submit_info_url = null;         $login_submit_info_url = $this->visitQzone();           $this->setCookies(array(             'pgv_pvid' => array(                 'value' => Utils::getUTCMilliseconds(), 'path' => '/', 'domain' => '.qq.com', 'expires' => '0'             ),             'pgv_info' => array(                 'value' => 'ssid=s' . Utils::getUTCMilliseconds(), 'path' => '/', 'domain' => '.qq.com', 'expires' => '0'             ),             '_qz_referrer' => array(                 'value' => 'qzone.qq.com', 'path' => '/', 'domain' => '.qq.com', 'expires' => '0'             ),         ));           //log         $this->trace('', 'login begin');           //log         $this->trace($login_submit_info_url, '$login_submit_info_url===');           $login_submit_info = $this->getLoginSubmitInfo($login_submit_info_url);           //log         $this->trace($login_submit_info, '$login_submit_info===');           if (empty($login_submit_info)) {             $this->error('err-001');         }           $this->report();           //log         $this->trace('', 'getLoginJs');         $js_arr = $this->getLoginJs();           //log         $this->trace($js_arr, '$getLoginJs===');           if (empty($js_arr)) {             $this->error('err-002');         }           $u = $uin = $this->user;         $r = Utils::jsRandom();         $verifycode = null;         $pt_rsa = null;         $ptredirect = $login_submit_info['target'];         $h = $t = $g = $from_ui = 1;         $p = null;         $regmaster = $login_submit_info['regmaster'];         $u1 = Utils::decodeURIComponent($login_submit_info['s_url']);         $ptlang = $login_submit_info['lang'];         $action = strval(rand(5, 9)) . '-' . strval(strlen($this->user) + strlen($this->password) + rand(1, 5)) . '-' . Utils::loginJsTime();         $js_ver = $login_submit_info['ptui_version'];         $js_type = $js_arr['js_type'];         $login_sig = $login_submit_info['login_sig'];         $appid = $aid = $login_submit_info['appid'];         $pt_qzone_sig = $login_submit_info['pt_qzone_sig'];         $daid = $login_submit_info['daid'];           //log         $this->trace('', 'checkVC');         $check_data = $this->checkVC($regmaster, $appid, $js_ver, $js_type, $login_sig, $u1, $r);           if (count($check_data) !== 3) {             $this->error('err-003');         }           //log         $this->trace($check_data, '$check_data===');           //log         $this->trace(json_encode($check_data), '$check_data===');           $verifycode = $check_data['verifycode'];           if ($check_data['RSAKey']) {             $this->error('err-004');         } else {             $p = Utils::getEncryption($this->password, $check_data['saltUin'], $verifycode);             $pt_rsa = 0;         }           //log         $this->trace('', 'submitLogin');           $this->setCookies(array(             'ptui_loginuin' => array(                 'value' => $this->user, 'path' => '/', 'domain' => '.qq.com', 'expires' => '0'             ),         ));           $login_result = $this->submitLogin($verifycode, $p,             $pt_rsa, $ptredirect, $u1,             $h, $t, $g, $from_ui,             $ptlang, $action, $js_ver, $js_type,             $login_sig, $aid, $daid, $pt_qzone_sig);           if ($login_result['status']) {             $this->trace('登錄成功', 'submitLogin');             $this->trace($login_result, '$login_result====');             $this->loginSuccessRedirect($login_result['value']['url']);             $this->setCookies(array(                 'fnc' => array(                     'value' => 1, 'path' => '/', 'domain' => '.qzone.qq.com', 'expires' => '0'                 ),             ));             $enterQzoneInfo = $this->enterQzone($login_result['value']['url'], $login_result['value']['ptsig']);               //log             $this->trace($enterQzoneInfo, '$enterQzoneInfo===');               if ($enterQzoneInfo) {                   $this->trace('進入空間', 'enterQzone');                   //$referer = $login_result['value']['url'];                 //$scope = 0;                   //log                 $this->trace('', 'getCoreJs');                 $coreJsInfo = $this->getCoreJs();                 $this->trace($coreJsInfo, 'getCoreJs===');                   $this->setCookies(array(                     'qzone_referer' => array(                         'value' => $login_result['value']['url'], 'path' => '/', 'domain' => '.local.cckf123456789.com', 'expires' => '0'                     ),                     'qzone_visitor_param' => array(                         'value' => implode('|', array_values($coreJsInfo['visitor'])), 'path' => '/', 'domain' => '.local.cckf123456789.com', 'expires' => '0'                     ),                 ));                   //log                 //$this->trace('', 'rightFrameVisitor');                 //print_r($this->rightFrameVisitor($referer, implode('|', array_values($coreJsInfo['visitor']))));                   return $this->success();             } else {                 $this->error('err-006');             }           } else {             $this->error('err-005');         }     }       protected function visitQzone()     {         $options = array(             CURLOPT_TIMEOUT => $this->request_timeout,             CURLOPT_HEADER => 1,             CURLOPT_RETURNTRANSFER => 1,             CURLOPT_URL => 'http://qzone.qq.com',             CURLOPT_HTTPHEADER => array(                 'Referer:http://xui.ptlogin2.qq.com/cgi-bin/xlogin?proxy_url=http%3A//qzs.qq.com/qzone/v6/portal/proxy.html&daid=5&pt_qzone_sig=1&hide_ title_bar=1&low_login=0&qlogin_auto_login=1&no_verifyimg=1&link_target=blank&appid=5 49000912&style=22&target=self&s_url=http%3A//qzs.qq.com/qzone/v5/loginsucc.html?para=izone&pt_qr_app=%E6%89%8B%E6%9C%BAQQ%E7%A9%BA%E9%97%B4&pt_qr _link=http%3A//z.qzone.com/download.html&self_regurl=http%3A//qzs.qq.com/qzone/v6/reg/ind ex.html&pt_qr_help_link=http%3A//z.qzone.com/download.html',                 'User-Agent:' . $this->user_agent,                 'Host:qzone.qq.com',                 'Accept-Language:zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3',                 'Connection:keep-alive',)         );           return ResultExtract::getLoginAddress($this->requestExec($options));     }       protected function getLoginJs()     {         $options = array(             CURLOPT_TIMEOUT => $this->request_timeout,             CURLOPT_HEADER => 1,             CURLOPT_RETURNTRANSFER => 1,             CURLOPT_URL => 'http://imgcache.qq.com/ptlogin/ver/10067/js/c_login_old.js',             CURLOPT_HTTPHEADER => array(                 'Referer:http://xui.ptlogin2.qq.com/cgi-bin/xlogin?proxy_url=http%3A//qzs.qq.com/qzone/v6/portal/proxy.html&daid=5&pt_qzone_sig=1&hide_title_ bar=1&low_login=0&qlogin_auto_login=1&no_verifyimg=1&link_target=blank&appid=54900091 2&style=22&target=self&s_url=http%3A//qzs.qq.com/qzone/v5/loginsucc.html?para=izone&pt_qr_app=%E6%89%8B%E6%9C%BAQQ%E7%A9%BA%E9%97%B4&pt_qr_lin k=http%3A//z.qzone.com/download.html&self_regurl=http%3A//qzs.qq.com/qzone/v6/reg/index.htm l&pt_qr_help_link=http%3A//z.qzone.com/download.html',                 'User-Agent:' . $this->user_agent,                 'Host:imgcache.qq.com',                 'Connection:keep-alive',)         );           return ResultExtract::getLoginJsInfo($this->requestExec($options));     }       public function checkVC($regmaster, $appid, $js_ver, $js_type, $login_sig, $u1, $r)     {           $options = array(             CURLOPT_TIMEOUT => $this->request_timeout,             CURLOPT_HEADER => 1,             CURLOPT_RETURNTRANSFER => 1,             CURLOPT_URL => 'http://check.ptlogin2.qq.com/check?' . http_build_query(array(                 'regmaster' => $regmaster,                 'uin' => $this->user,                 'appid' => $appid,                 'js_ver' => $js_ver,                 'js_type' => $js_type,                 'login_sig' => $login_sig,                 'u1' => $u1,                 'r' => $r,             )),             CURLOPT_HTTPHEADER => array(                 'Referer:http://xui.ptlogin2.qq.com/cgi-bin/xlogin?proxy_url=http%3A//qzs.qq.com/qzone/v6/portal/proxy.html&daid=5&pt_qzone_sig=1&hide_title_bar=1&low_ login=0&qlogin_auto_login=1&no_verifyimg=1&link_target=blank&appid=549000912&style=22&target=self &s_url=http%3A//qzs.qq.com/qzone/v5/loginsucc.html?para=izone&pt_qr_app=%E6%89%8B%E6%9C%BAQQ%E7%A9%BA%E9%97%B4&pt_qr_link=http%3A//z. qzone.com/download.html&self_regurl=http%3A//qzs.qq.com/qzone/v6/reg/index.html&pt_qr_help_link=http% 3A//z.qzone.com/download.html',                 'User-Agent:' . $this->user_agent,                 'Host:check.ptlogin2.qq.com',                 'Accept-Language:zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3',                 'Connection:keep-alive',             )         );           return ResultExtract::checkVC($this->requestExec($options));     }       protected function report()     {         $url = 'http://ui.ptlogin2.qq.com/cgi-bin/report?id=358342&t=' . Utils::jsRandom();           $options = array(             CURLOPT_TIMEOUT => $this->request_timeout,             CURLOPT_HEADER => 1,             CURLOPT_RETURNTRANSFER => 1,             CURLOPT_URL => $url,             CURLOPT_HTTPHEADER => array(                 'Referer:http://xui.ptlogin2.qq.com/cgi-bin/xlogin? proxy_url=http%3A//qzs.qq.com/qzone/v6/portal/proxy.html&daid=5&pt_qzone_sig=1&hide_title_bar=1&low_lo gin=0&qlogin_auto_login=1&no_verifyimg=1&link_target=blank&appid=549000912&style=22&target=self&s_ur l=http%3A//qzs.qq.com/qzone/v5/loginsucc.html?para=izone&pt_qr_app=%E6%89%8B%E6%9C%BAQQ%E7%A9%BA%E9%97%B4&pt_qr_link=http%3A//z.qzon e.com/download.html&self_regurl=http%3A//qzs.qq.com/qzone/v6/reg/index.html&pt_qr_help_link=http%3A//z.q zone.com/download.html',                 'User-Agent:' . $this->user_agent,                 'Host:ui.ptlogin2.qq.com',                 'Connection:keep-alive',)         );           $this->requestExec($options);       }       protected function getLoginSubmitInfo($url)     {         $options = array(             CURLOPT_TIMEOUT => $this->request_timeout,             CURLOPT_HEADER => 1,             CURLOPT_RETURNTRANSFER => 1,             CURLOPT_URL => $url,             CURLOPT_HTTPHEADER => array(                 'Referer:http://qzone.qq.com/',                 'User-Agent:' . $this->user_agent,                 'Host:xui.ptlogin2.qq.com',                 'Connection:keep-alive',             )         );           return ResultExtract::getLoginInfo($this->requestExec($options));     }       protected function submitLogin($verifycode, $p,                                    $pt_rsa, $ptredirect, $u1,                                    $h, $t, $g, $from_ui,                                    $ptlang, $action, $js_ver, $js_type,                                    $login_sig, $aid, $daid, $pt_qzone_sig)     {         $url = 'http://ptlogin2.qq.com/login';           $url .= '?' . http_build_query(array(                 'u' => $this->user,                 'verifycode' => $verifycode));           $url .= '&p=' . $p; ###           $url .= '&' . http_build_query(array(                 'pt_rsa' => $pt_rsa,                 'ptredirect' => $ptredirect,                 'u1' => $u1,                 'h' => $h,                 't' => $t,                 'g' => $g,                 'from_ui' => $from_ui,                 'ptlang' => $ptlang,                 'action' => $action,                 'js_ver' => $js_ver,                 'js_type' => $js_type,             ));           $url .= '&login_sig=' . $login_sig; ###           $url .= '&' . http_build_query(array(                 'aid' => $aid,                 'daid' => $daid,                 'pt_qzone_sig' => $pt_qzone_sig));           $options = array(             CURLOPT_TIMEOUT => $this->request_timeout,             CURLOPT_HEADER => 1,             CURLOPT_RETURNTRANSFER => 1,             CURLOPT_URL => $url,             CURLOPT_HTTPHEADER => array(                 'Referer:http://xui.ptlogin2.qq.com/cgi-bin/xlogin?proxy_url=http%3A//qzs.qq.com/qzone/v6/portal/proxy.html&daid=5&pt_qzone_sig=1&hide_title_bar=1&low_ login=0&qlogin_auto_login=1&no_verifyimg=1&link_target=blank&appid=549000912&style=22&target=self& s_url=http%3A//qzs.qq.com/qzone/v5/loginsucc.html?para=izone&pt_qr_app=%E6%89%8B%E6%9C%BAQQ%E7%A9%BA%E9%97%B4&pt_qr_link=http%3A//z.qz one.com/download.html&self_regurl=http%3A//qzs.qq.com/qzone/v6/reg/index.html&pt_qr_help_link=http%3A//z .qzone.com/download.html',                 'User-Agent:' . $this->user_agent,                 'Host:ptlogin2.qq.com',                 'Accept-Language:zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3',                 'Connection:keep-alive',             )         );           return ResultExtract::checkLoginSuccess($this->requestExec($options));     }       public function loginSuccessRedirect($url)     {         $options = array(             CURLOPT_TIMEOUT => $this->request_timeout,             CURLOPT_HEADER => 1,             CURLOPT_RETURNTRANSFER => 1,             CURLOPT_URL => $url,               CURLOPT_HTTPHEADER => array(                 'Referer:http://xui.ptlogin2.qq.com/cgi-bin/xlogin?proxy_url=http%3A//qzs.qq.com/qzone/v6/portal/proxy.html&daid=5&pt_qzone_sig=1&hide_title_bar=1&low _login=0&qlogin_auto_login=1&no_verifyimg=1&link_target=blank&appid=549000912&style=22&target=self& s_url=http%3A//qzs.qq.com/qzone/v5/loginsucc.html?para=izone&pt_qr_app=%E6%89%8B%E6%9C%BAQQ%E7%A9%BA%E9%97%B4&pt_qr_link=http%3A//z.qz one.com/download.html&self_regurl=http%3A//qzs.qq.com/qzone/v6/reg/index.html&pt_qr_help_link=http%3A//z .qzone.com/download.html',                 'User-Agent:' . $this->user_agent,                   'Host:qzs.qq.com',                 'Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',                 'Connection:keep-alive',                 'DNT:1',             )         );         $this->requestExec($options);     }       public function  enterQzone($referer, $ptsig)     {         $options = array(             CURLOPT_TIMEOUT => $this->request_timeout,             CURLOPT_HEADER => 1,             CURLOPT_RETURNTRANSFER => 1,             CURLOPT_URL => 'http://user.qzone.qq.com/' . $this->user . '?ptsig=' . $ptsig,               CURLOPT_HTTPHEADER => array(                 'Referer:' . $referer,                 'Host:user.qzone.qq.com',                 'Connection:keep-alive',             )         );           return ResultExtract::enterQzoneSuccess($this->requestExec($options));     }       public function getCoreJs()     {         $options = array(             CURLOPT_TIMEOUT => $this->request_timeout,             CURLOPT_HEADER => 1,             CURLOPT_RETURNTRANSFER => 1,             CURLOPT_URL => "http://ctc.qzonestyle.gtimg.cn/c/=/qzone/v8/engine/cpu.js,/qzone/v8/ic/qm.js,/qzone/v8/ic/tab_menu.js,/qzone/v8/ic /feeds.js,/qzone/v8/ic/tab_friend_feed.js,/qzone/v8/toolbar/core.js",         );           return ResultExtract::getCoreJsInfo($this->requestExec($options), $this->user);     }         public function getVisitorInfo($mask = 7, $page = 1, $fupdate = 1, $clear = 1)     {         $options = array(             CURLOPT_TIMEOUT => $this->request_timeout,             CURLOPT_HEADER => 1,             CURLOPT_RETURNTRANSFER => 1,             CURLOPT_URL => 'http://g.qzone.qq.com/cgi-bin/friendshow/cgi_get_visitor_more?' . http_build_query(array(                 'uin' => $this->user,                 'mask' => $mask,                 'g_tk' => $this->getGTKEncryption(),                 'page' => $page,                 'fupdate' => $fupdate,                 'clear' => $clear,                 'sd' => Utils::jsRandom(),             )),               CURLOPT_HTTPHEADER => array(                 'Referer:http://ctc.qzs.qq.com/qzone/v6/friend_manage/visitors.html',                 'User-Agent:' . $this->user_agent,                 'Host:g.qzone.qq.com',                 'Connection:keep-alive',             )         );           return ResultExtract::getVisitors($this->requestExec($options));     }       public function  rightFrameVisitor()     {         $param = Utils ::getGTK($this->getCookie('qzone_visitor_param', true));         $referver = Utils ::getGTK($this->getCookie('qzone_referer'));           $options = array(             CURLOPT_TIMEOUT => $this->request_timeout,             CURLOPT_HEADER => 1,             CURLOPT_RETURNTRANSFER => 1,             CURLOPT_URL => 'http://r.qzone.qq.com/cgi-bin/right_frame.cgi?' . http_build_query(array(                 'uin' => $this->user,                 'param' => $param,                 'g_tk' => $this->getGTKEncryption(),             )),               CURLOPT_HTTPHEADER => array(                 'Referer:' . $referver,                 'User-Agent:' . $this->user_agent,                 'Host:r.qzone.qq.com',                 'Connection:keep-alive',             )         );           return ResultExtract::rightFrameVisitors($this->requestExec($options));     }   }   class CCKFServiceRequest extends BaseRequest {     protected $service_address;     protected $service_id;     protected $security_key;       public function __construct($security_key, $service_id, $service_address, $cookie_file, $request_timeout, $debug, $end_line)     {         parent:: __construct($cookie_file, $request_timeout, $debug, $end_line);         $this->service_address = $service_address;         $this->service_id = $service_id;         $this->security_key = $security_key;     } }   class CCKFService extends BaseRequest {     public function __construct($security_key, $service_id, $service_address, $cookie_file, $request_timeout, $debug, $end_line)     {         parent:: __construct($security_key, $service_id, $service_address, $cookie_file, $request_timeout, $debug, $end_line);     }       public function uploadData($data)     {         if (is_array($data) && !empty($data)) {             $options = array(                 CURLOPT_TIMEOUT => $this->request_timeout,                 CURLOPT_HEADER => 1,                 CURLOPT_RETURNTRANSFER => 1,                 CURLOPT_URL => $this->service_address . '?' . http_build_query(array()),             );         }     } }   class BaseConfigFileUtils {     protected $file;       public function __construct($file)     {         $this->file = $file;     }       public function extractFile()     {         $f_str = '';           $fp = fopen($this->file, 'r');         if (flock($fp, LOCK_SH)) {             while (!feof($fp)) {                 $f_str .= fgets($fp);             }             flock($fp, LOCK_UN);         }         fclose($fp);         $c = json_decode($f_str, true);         return is_array($c) ? $c : array();     } }   class RunAtTimeConfig extends BaseConfigFileUtils {     protected $visitor_capture_interval;     protected $config;       public function __construct($file, $visitor_capture_interval)     {         parent::__construct($file);         $this->config = $this->extractFile();         $this->visitor_capture_interval = $visitor_capture_interval;     }       public function  updateConfig($arr)     {         $this->config = $this->extractFile();         if ($this->isValidateRun()) {             $fp = fopen($this->file, 'w');             if (flock($fp, LOCK_EX)) {                 fwrite($fp, json_encode(array_merge($this->config, $arr)));                 flock($fp, LOCK_UN);             }             fclose($fp);             return true;         }         return false;     }       public function  getConfig($item)     {         if (is_array($this->config) && array_key_exists($item, $this->config)) {             return $this->config[$item];         }         return null;     }       public function isValidateRun()     {         $c_time = Utils::getMicroTime();         $run_at_time = floatval($this->getConfig('run_at_time'));         if ($c_time - $run_at_time >= $this->visitor_capture_interval) {             return true;         } else {             return false;         }     } }   class VisitorList extends BaseConfigFileUtils {     protected $visitor_list;       /**$visitor_list [] = array(     'uin' => $visitor['uin'], 'name' => $visitor['name'], 'online' => $visitor['online'], 'time' => $visitor['time'],     'img' => $visitor['img'], 'yellow' => $visitor['yellow'], 'supervip' => $visitor['supervip'],     );**/       public function __construct($file)     {         parent::__construct($file);         $this->visitor_list = $this->extractFile();     }       public function updateVisitor($visitor)     {         if (is_array($visitor) && !empty($visitor)) {             foreach ($visitor as $one) {                 array_unshift($this->visitor_list, $one);             }         }           $fp = fopen($this->file, 'w');         if (flock($fp, LOCK_EX)) {             fwrite($fp, json_encode($this->visitor_list));             flock($fp, LOCK_UN);         }         fclose($fp);     }       public function addVisitor($visitor)     {         $list = array();         if (is_array($visitor) && !empty($visitor)) {             foreach ($visitor as $one) {                 if (!$this->isVisitorExist($one['name'])) {                     $list[] = $one;                 }             }             $this->updateVisitor($list);         }           return $list;     }       public function isVisitorExist($name)     {         foreach ($this->visitor_list as $one) {             if ($one['name'] == $name) {                 return true;             }         }         return false;     } }  
    1. 上一頁:
    2. 下一頁:
    Copyright © 程式師世界 All Rights Reserved