设为首页 收藏本站
查看: 584|回复: 0

[经验分享] php获取qq邮箱用户好友的方法

[复制链接]

尚未签到

发表于 2017-4-10 09:36:15 | 显示全部楼层 |阅读模式
  此方法应用 jinhao7773
  的blog中的方法




使用Python模拟登录QQ邮箱获取QQ好友列表

  代码于2010年6月3日1:07:42 更新。

  我用php做了改写,可能有不完善的地方。
  

  附件中有代码,
  主要的类为class.qqhttp.php

<?php
/**
* @file class.qqhttp.php
* qq邮箱登陆获取类
* @author wc<cao8222@gmail.com>
* @date 2009-04-27
*/
class QQHttp {
var $cookie = '';
function __cunstrut() {
}
function makeForm() {
$form = array(
'url' => "http://mail.qq.com/cgi-bin/loginpage",
);
$data = $this->curlFunc($form);
preg_match('/name="ts"\svalue="(\d+)"/',$data['html'], $tspre);
$ts = $tspre[1];
preg_match('/action="http:\/\/(m\d+)\.mail\.qq\.com/',$data['html'], $server);
$server_no = $server[1];
/*  login.html 载入 */
$html = file_get_contents(dirname(__FILE__).'/login.htm');
$html = str_replace('{_ts_}',$ts, $html);
$html = str_replace('{_server_no_}',$server_no, $html);
return $html;
}
function curlFunc($array)
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $array['url']);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
if( isset($array['header']) && $array['header'] ) {
curl_setopt($ch, CURLOPT_HEADER, 1);
}
if(isset($array['httpheader'])) {
curl_setopt($ch, CURLOPT_HTTPHEADER, $array['httpheader']);
}
if(isset($array['referer'])) {
curl_setopt($ch, CURLOPT_REFERER, $array['referer']);
}
if( isset($array['post']) ) {
curl_setopt($ch, CURLOPT_POST, 1 );
curl_setopt($ch, CURLOPT_POSTFIELDS, $array['post']);
}
if( isset($array['cookie']) ){
curl_setopt($ch, CURLOPT_COOKIE, $array['cookie']);
}
$r['erro'] = curl_error($ch);
$r['errno'] = curl_errno($ch);
$r['html'] = curl_exec($ch);
$r['http_code'] = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
return $r;
}
/**
* 获取验证码图片和cookie
* @param Null
*
* @return array('img'=>String, 'cookie'=>String)
*/
function getVFCode ()
{
$t = 'http://m127.mail.qq.com/cgi-bin/getverifyimage?aid=23000101&0.8881121444410955';
$t = 'ttp://mail.qq.com/cgi-bin/getinvestigate?t=loginpage&stat=verifyimg&verifyuser=49450402';
$vfcode = array(
'header' => true,
'cookie' => false,
'url'=>'http://'.$_GET['server_no'].'.mail.qq.com/cgi-bin/getverifyimage?aid='.$_GET['aid'].'&'.@$_GET['t'],
);
//var_dump($vfcode);
$r = $this->curlFunc($vfcode);
if ($r['http_code'] != 200 ) return false;
$data = split("\n", $r['html']);
//var_dump($data);exit;
preg_match('/verifyimagesession=([^;]+);/',$data[7], $temp);
$cookie = trim($temp[1]);
$img = $data[11];
return  array('img'=>$img,'cookie'=>$cookie, 'data'=>$data);
}
/**
* 登陆qq邮箱
*
* @param $cookie getvfcode中生成的cookie
*
* @return array(
*   sid=>String , //用户认证的唯一标示
*   login => Boolean, //true 登陆成功 ,false 登陆失败
*   server_no => String // 服务器编号
*   active => Boolean //true 已开通 ,false 未开通 邮箱
*   cookie => String // 获取数据cookie
*
* );
*/
function login($cookie)
{
/* 生成参数字符串 */
$post = array();
foreach($_POST as $k => $v) {
$post[] = $k.'='.urlencode($v);
}
$poststr = implode('&',$post);
$r['server_no'] = $_GET['server_no'];
$login = array(
'url'=>'http://'.$r['server_no'].'.mail.qq.com/cgi-bin/login?sid=0,2,zh_CN',
'header' => true,
'cookie' => 'verifyimagesession='.$cookie,
'referer' => 'http://mail.qq.com/cgi-bin/loginpage',
'httpheader'=>array(
"Host: " . $r['server_no'] . '.mail.qq.com',
"User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.0.9) Gecko/2009040821 Firefox/3.0.9 FirePHP/0.2.4",
"Content-Type: application/x-www-form-urlencoded",
),
'post' => $poststr ,
);
$data = $this->curlFunc($login);
$data['html'] = iconv("gb2312", "UTF-8", $data['html']);
if ($data['http_code'] != 200) {
$this->error($data);
return false;
}
// var_dump(str_replace('script','',$data));exit;
/* 测试数据 */
//$data['html'] =file_get_contents('./r.txt');
$r['uin'] = $_POST['uin'];
/* 登陆错误的判断 */
if (preg_match('|errtype=(\d)|', $data['html'], $temp_err)) {
$r['login'] = false;
if ($temp_err[1] == 1) {
$r['msg'] = '账号和密码错误';
} elseif ($temp_err[1] == 2) {
$r['msg'] = '验证码错误';
}
return $r;
}
/* 登陆成功 */
preg_match('|urlHead="([^"]+)"|i',$data['html'],$temp_url);
$urlhead = $temp_url[1];
if (preg_match('|frame_html\?sid=([^"]+)"|i',$data['html'],$temp_sid) ) {
$r['sid'] = $temp_sid[1];
$r['active'] = true;
} elseif (preg_match('|autoactivation\?sid=([^&]+)?&|i',$data['html'],$temp_sid) ) {
$r['sid'] = $temp_sid[1];
$r['active'] = false;
}
/* 登录后cookie的获取 ,在后续操作中用到 */
if (preg_match_all('|Set-Cookie:([^=]+=[^;]+)|i', $data['html'], $new_cookies) ) {
$cookiestr = implode('; ', $new_cookies[1]);
$cookiestr .= '; verifyimagesession='.$cookie;
}
$r['login'] = true;
$r['cookie'] = $cookiestr;
return $r;
}
function openEmail($param)
{
$openEmail = array(
'url'=>'http://'.$param['server_no'].'.mail.qq.com/cgi-bin/autoactivation?actmode=6&sid='.$param['sid'],
'header' => true,
'cookie' => $param['cookie'],
'referer' => 'http://'.$param['server_no'].'mail.qq.com/cgi-bin/autoactivation?sid='.$param['sid'].'&action=reg_activate&actmode=6',
'httpheader'=>array(
"Host: " . $param['server_no'] . '.mail.qq.com',
'Accept-Charset: gb2312,utf-8;q=0.7,*;q=0.7',
"User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.0.9) Gecko/2009040821 Firefox/3.0.9 FirePHP/0.2.4",
),
);
$data =  $this->curlFunc($openEmail);
if (preg_match('|Set-Cookie:qqmail_activated=0|i', $data['html'])) {
$param['active'] = true;
$param['cookie'] = $param['cookie'] .'; qqmail_activated=0; qqmail_alias=';
}
return $param;
}
/**
*
* 获取friends数据
*
* @param $param = array(
*   sid=>String , //用户认证的唯一标示
*   login => Boolean, //true 登陆成功 ,false 登陆失败
*   server_no => String // 服务器编号
*   active => Boolean //true 已开通 ,false 未开通 邮箱
*   cookie => String // 获取数据cookie
*
* );
* @return Array(
*   key=>value, // key:qq号,value: nickname
* );
*/
function getFriends($param)
{
$friend = array(
'url'=>'http://'.$param['server_no'].'.mail.qq.com/cgi-bin/addr_listall?type=user&&category=all&sid='.$param['sid'],
'header' => true,
'cookie' => $param['cookie'],
'referer' => 'http://m151.mail.qq.com/cgi-bin/addr_listall?sid='.$param['sid'].'&sorttype=null&category=common',
'httpheader'=>array(
"Host: " . $param['server_no'] . '.mail.qq.com',
'Accept-Charset:utf-8;q=0.7,*;q=0.7',
"User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.0.9) Gecko/2009040821 Firefox/3.0.9 FirePHP/0.2.4",
),
);
$r = $this->curlFunc($friend);
if ($r['http_code'] != 200) {
$this->error($r);
return false;
}
$data =  $r['html'];
$preg = preg_match_all('|<p class="L_n"><span t="1" u="(\d+)" n="([^"]+)" e="([^"]+)">|i', $data, $temp_list);
if ($preg == 0) return array();
$list = array_combine($temp_list[1],$temp_list[2]);
return $list;
}
/**
* 错误显示
*
* @param $str array
*
* @return
*/
function error($str) {
$str['html'] = str_replace('script','', $str['html']);
var_dump($str);
exit;
}
}
?>
   代码可以下载,最新的

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-362726-1-1.html 上篇帖子: Apache2 + PHP 在Windows2000下不稳定解决方案 下篇帖子: PHP-Javascript“返回上一页”无缓存问题
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表