|
本帖最后由 ivwghtiqny 于 2013-10-14 10:03 编辑
QQ拥有庞大的用户群,我们搞数据采集的当然不能放过它.比如:空间日志,空间说说,空间留言这类...
qq网络出身,对登陆还是防得比较严的.先说下思路:
1.检查登录是否需要验证码,获取验证码校验值
2.通过验证码校验值、密码计算出登录校验值
3.模拟登录
实现步骤和请求地址:
1.检查是否需要验证码:
URL:http://check.ptlogin2.qq.com/check?uin=QQ号码&appid=549000912&ptlang=2052&js_type=2&js_ver=10009&r=随机数
参数说明:
uin:QQ号
r:随机数
返回结果
不需要验证码:ptui_checkVC('0','!UYE','\x00\x00\x00\x00\x09\x15\xa9\x78')
2.计算校验值
从上一步的返回值中获得 skey (ptui_checkVC函数中的第三个参数)
从上一步的返回值中获得 code (ptui_checkVC函数中的第二个参数)
ptui_checkVC('0','code','skey')
$pwd = get_pwd(md5($pwd2 . strtoupper($code)));
这样就得到了加密后的密码了
模拟登录:
URL:
URL:http://ptlogin2.qq.com/login?ptlang=2052&u=QQ号码&p=上面加密后的$pwd&verifycode=验证码$code&css=http://imgcache.qq.com/p
tcss/b2/sjpt/549000912/qzonelogin_ptlogin.css&mibao_css=m_qzone&aid=549000912&u1=http%3A%2F%2Fqzs.qq.com%2Fqzone%2Fv5%2Flogin
succ.html%3Fpara%3Dizone&ptredirect=1&h=1&from_ui=1&dumy=&fp=loginerroralert&action=4-16-29103&g=1&t=1&dummy=&js_type=2&js_ve
r=10009
上面所有的发送都是使用php中的curl组件,代码在下面:
function get_data($url,$act,$psot){
$Session = dirname(__FILE__).'/session.tmp';
$ch = curl_init();//初始化curl
curl_setopt($ch,CURLOPT_URL, $url);//提交到指定网页
curl_setopt($ch, CURLOPT_HEADER, 0);//设置header
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.12 (KHTML, like Gecko) Maxthon/3.0 Chrome/18.0.966.0 Safari/535.12');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//要求结果为字符串且输出到屏幕上
if ($act == 'on') {
curl_setopt($ch, CURLOPT_POST, 1);//post提交方式
curl_setopt($ch, CURLOPT_POSTFIELDS, $psot);
}
curl_setopt($ch, CURLOPT_COOKIEFILE, $Session);
curl_setopt($ch, CURLOPT_COOKIEJAR, $Session);//保存cookie
$con = curl_exec($ch);//运行curl
curl_close($ch);
return $con;
}
发送登陆url后会返回
成功后返回结果:ptuiCB(\'0\',\'0\',\'http://qzs.qq.com/qzone/v5/loginsucc.html?para=izone\',\'1\',\'登录成功!\', \'QQ昵称\')
图片备用:
http://xiangce.baidu.com/picture/detail/21580024872a8ae35e22c2ca6dfc9c9a7d2bd7f2
http://xiangce.baidu.com/picture/detail/8026ff2d912516c645e98b90d3beca156fcfceb7
这样QQ自动登陆就写好了,以后有机会再来分享给大家!
|
|