首页 > 编程 > PHP > 正文

php使用curl抓取qq空间的访客信息示例

2020-03-22 18:25:23
字体:
来源:转载
供稿:网友
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- clearhtml' target='_blank'>Cookies(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])
return $n;
case 3:
$n = (ord($c[0]) & 0x1f) 12;
$n += (ord($c[1]) & 0x3f) 6;
$n += ord($c[2])
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])
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('/cfg/s*=/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_Data/s*=/s*{/s*feedsPart1/s*:/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/.plogin/s*=/s*/{(.*?)aqScanLink.*/s', '$1', $content);
preg_match('/.*js_type/s*:/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*iframe/s*id/s*=/s*"login_frame"/s*name/s*=/s*"login_frame".*?src/s*=/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/.ptui/s*=/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('/^encodeURIComponent/s*/(/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& ',
'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& ',
'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& ',
'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(
CPHP教程

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表