config.
php复制代码代码如下:php
'2064556526', 'password' => '909124124951'),array('user' => '483258700', 'password' => '909124124951'),array('user' => '1990270522', 'password' => '909124124951'),array('user' => '2718711637', 'password' => '909124124951'),array('user' => '2841076562', 'password' => '909124124951'),);qy.visitor.php复制代码代码如下:php
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
下载$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('/.*?qq.com.*?)".*?>s*.*?/', $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=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: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=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: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, 
