首页 > php框架 > PHP获取QQ邮箱好友的具体代码讲解

PHP获取QQ邮箱好友的具体代码讲解

目前,大家都在使用QQ,并且还将QQ附带的一些其他软件当做自己的日常使用工具。今天我们就向大家介绍有关如何运用
具体的PHP获取QQ邮箱好友的代码如下:

  1. <?php 
  2. /**   
  3. * @file class.qqhttp.php  
  4. * qq邮箱登陆获取类  
  5. * @author wc<cao8222@gmail.com> 
  6. * @date 2009-04-27  
  7.  */  
  8.  
  9. class QQHttp {  
  10.  
  11.     var $cookie = ;  
  12.  
  13.     function __cunstrut() {  
  14.     }  
  15.  
  16.     function makeForm() {  
  17.         $form = array(  
  18.             url => http://mail.qq.com/cgi-bin/loginpage,  
  19.         );  
  20.         $data = $this->curlFunc($form);  
  21.         preg_match(/name=tssvalue=(d+)/,$data[html], $tspre);  
  22.         $ts = $tspre[1];  
  23.         preg_match(/action=http://(md+).mail.qq.com/,$data[html], $server);  
  24.         $server_no = $server[1];  
  25.  
  26.         /*  login.html 载入 */  
  27.         $html = file_get_contents(dirname(__FILE__)./login.htm);  
  28.         $html = str_replace({_ts_},$ts, $html);  
  29.         $html = str_replace({_server_no_},$server_no, $html);  
  30.         return $html;  
  31.     }  
  32.  
  33.     function curlFunc($array)  
  34.     {  
  35.         $ch = curl_init();  
  36.         curl_setopt($ch, CURLOPT_URL, $array[url]);  
  37.         curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);  
  38.         if( isset($array[header]) && $array[header] ) {  
  39.             curl_setopt($ch, CURLOPT_HEADER, 1);  
  40.         }  
  41.         if(isset($array[httpheader])) {  
  42.             curl_setopt($ch, CURLOPT_HTTPHEADER, $array[httpheader]);  
  43.         }  
  44.         if(isset($array[referer])) {  
  45.             curl_setopt($ch, CURLOPT_REFERER, $array[referer]);  
  46.         }  
  47.         if( isset($array[post]) ) {  
  48.             curl_setopt($ch, CURLOPT_POST, 1 );  
  49.             curl_setopt($ch, CURLOPT_POSTFIELDS, $array[post]);  
  50.         }  
  51.         if( isset($array[cookie]) ){  
  52.             curl_setopt($ch, CURLOPT_COOKIE, $array[cookie]);  
  53.         }  
  54.         $r[erro] = curl_error($ch);  
  55.         $r[errno] = curl_errno($ch);  
  56.         $r[html] = curl_exec($ch);  
  57.         $r[http_code] = curl_getinfo($ch, CURLINFO_HTTP_CODE);  
  58.         curl_close($ch);  
  59.         return $r;  
  60.     }  
  61.  
  62.     /**   
  63.      * 获取验证码图片和cookie  
  64.      * @param Null  
  65.      *   
  66.      * @return array(img=>String, cookie=>String)  
  67.      */  
  68.     function getVFCode ()   
  69.     {  
  70.         $vfcode = array(  
  71.             header => true,  
  72.             cookie => false,  
  73.             url=>http://ptlogin2.qq.com/getimage?aid=.$_GET[aid].&.@$_GET[t],  
  74.         );  
  75.  
  76.         $r = $this->curlFunc($vfcode);  
  77.         if ($r[http_code] != 200 ) return false;  
  78.         $data = split(n, $r[html]);  
  79.         preg_match(/verifysession=([^;]+);/,$data[5], $temp);  
  80.         $cookie = trim($temp[1]);  
  81.         $img = $data[9];  
  82.         return  array(img=>$img,cookie=>$cookie);  
  83.     }  
  84.  
  85.     /**   
  86.      * 登陆qq邮箱  
  87.      *   
  88.      * @param $cookie getvfcode中生成的cookie  
  89.      *   
  90.      * @return array(  
  91.      *   sid=>String , //用户认证的唯一标示  
  92.      *   login => Boolean, //true 登陆成功 ,false 登陆失败  
  93.      *   server_no => String // 服务器编号  
  94.      *   active => Boolean //true 已开通 ,false 未开通 邮箱  
  95.      *   cookie => String // 获取数据cookie  
  96.      *  
  97.      * );  
  98.      */  
  99.     function login($cookie)   
  100.     {  
  101.         /* 生成参数字符串 */  
  102.         $post = array();  
  103.         foreach($_POST as $k => $v) {  
  104.             $post[] = $k.=.urlencode($v);  
  105.         }  
  106.         $poststr = implode(&,$post);  
  107.         $r[server_no] = $_GET[server_no];  
  108.  
  109.         $login = array(  
  110.             url=>http://.$r[server_no]..mail.qq.com/cgi-bin/login?sid=0,2,zh_CN,  
  111.             header => true,  
  112.             cookie => verifysession=.$cookie,  
  113.             referer => http://mail.qq.com/cgi-bin/loginpage,  
  114.             httpheader=>array(  
  115.                 Host:  . $r[server_no] . .mail.qq.com,  
  116.                 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,  
  117.                 Content-Type: application/x-www-form-urlencoded,  
  118.             ),  
  119.             post => $poststr ,  
  120.         );  
  121.         $data = $this->curlFunc($login);  
  122.         $data[html] = iconv(gb2312, UTF-8, $data[html]);  
  123.         if ($data[http_code] != 200) {  
  124.             $this->error($data);  
  125.             return false;  
  126.         }  
  127.  
  128.         /* 测试数据 */  
  129.         //$data[html] =file_get_contents(./r.txt);  
  130.         $r[uin] = $_POST[uin];  
  131.         /* 登陆错误的判断 */  
  132.         if (preg_match(|errtype=(d)|, $data[html], $temp_err)) {  
  133.             $r[login] = false;  
  134.             if ($temp_err[1] == 1) {  
  135.                 $r[msg] = 账号和密码错误;  
  136.             } elseif ($temp_err[1] == 2) {  
  137.                 $r[msg] = 验证码错误;  
  138.             }  
  139.             return $r;  
  140.         }  
  141.         /* 登陆成功 */  
  142.         preg_match(|urlHead=([^]+)|i,$data[html],$temp_url);  
  143.         $urlhead = $temp_url[1];  
  144.         if (preg_match(|frame_html?sid=([^]+)|i,$data[html],$temp_sid) ) {  
  145.             $r[sid] = $temp_sid[1];  
  146.             $r[active] = true;  
  147.         } elseif (preg_match(|autoactivation?sid=([^&]+)?&|i,$data[html],$temp_sid) ) {  
  148.             $r[sid] = $temp_sid[1];  
  149.             $r[active] = false;  
  150.         }  
  151.         /* 登录后cookie的获取 ,在后续操作中用到 */  
  152.         if (preg_match_all(|Set-Cookie:([^=]+=[^;]+)|i, $data[html], $new_cookies) ) {  
  153.             $cookiestr = implode(; , $new_cookies[1]);  
  154.             $cookiestr .; verifysession=.$cookie;  
  155.         }  
  156.  
  157.         $r[login] = true;  
  158.         $r[cookie] = $cookiestr;  
  159.         return $r;  
  160.     }  
  161.  
  162.     function openEmail($param)   
  163.     {  
  164.         $openEmail = array(  
  165.             url=>http://.$param[server_no]..mail.qq.com/cgi-bin/autoactivation?actmode=6&sidsid=.$param[sid],  
  166.             header => true,  
  167.             cookie => $param[cookie],  
  168.             referer => http://.$param[server_no].mail.qq.com/cgi-bin/autoactivation?sid=.$param[sid].&action=reg_activate&actmode=6,   
  169.             httpheader=>array(  
  170.                 Host:  . $param[server_no] . .mail.qq.com,  
  171.                 Accept-Charset: gb2312,utf-8;q=0.7,*;q=0.7,  
  172.                 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,  
  173.             ),  
  174.         );  
  175.  
  176.         $data =  $this->curlFunc($openEmail);  
  177.         if (preg_match(|Set-Cookie:qqmail_activated=0|i, $data[html])) {  
  178.             $param[active] = true;  
  179.             $param[cookie] = $param[cookie] .; qqmail_activated=0qqmail_alias=;  
  180.         }  
  181.         return $param;  
  182.     }  
  183.  
  184.     /**   
  185.      *   
  186.      * 获取friends数据   
  187.      *   
  188.      * @param $param = array(  
  189.      *   sid=>String , //用户认证的唯一标示  
  190.      *   login => Boolean, //true 登陆成功 ,false 登陆失败  
  191.      *   server_no => String // 服务器编号  
  192.      *   active => Boolean //true 已开通 ,false 未开通 邮箱  
  193.      *   cookie => String // 获取数据cookie  
  194.      *  
  195.      * );  
  196.      * @return Array(  
  197.      *   key=>value, // key:qq号,value: nickname  
  198.      * );  
  199.      */  
  200.     function getFriends($param)  
  201.     {  
  202.  
  203.         $friend = array(  
  204.             url=>http://.$param[server_no]..mail.qq.com/cgi-bin/addr_listall?type=user&&category=all&sidsid=.$param[sid],  
  205.             header => true,  
  206.             cookie => $param[cookie],  
  207.             referer => http://m151.mail.qq.com/cgi-bin/addr_listall?sid=.$param[sid].&sorttype=null&category=common,  
  208.             httpheader=>array(  
  209.                 Host:  . $param[server_no] . .mail.qq.com,  
  210.                 Accept-Charset:utf-8;q=0.7,*;q=0.7,  
  211.                 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,  
  212.             ),  
  213.         );  
  214.         $r = $this->curlFunc($friend);  
  215.         if ($r[http_code] != 200) {  
  216.             $this->error($r);  
  217.             return false;  
  218.         }  
  219.         $data =  $r[html];  
  220.         $preg = preg_match_all(|<p class=L_n><span><img class=L_q name=qqplusimg key=(d+)[^>]+/>&nbsp;([^<]+)</span></p>|i, $data, $temp_list);  
  221.         if ($preg == 0) return array();  
  222.         $list = array_combine($temp_list[1],$temp_list[2]);  
  223.         return $list;  
  224.     }  
  225.  
  226.     /**   
  227.      * 错误显示  
  228.      *   
  229.      * @param $str array  
  230.      *   
  231.      * @return   
  232.      */  
  233.     function error($str) {  
  234.         $str[html] = str_replace(script,, $str[html]);  
  235.         var_dump($str);  
  236.         exit;  
  237.     }  
  238. }  
  239.  
  240. ?> 

怎么样,通过以上对于PHP获取QQ邮箱好友的代码的介绍,大家是否已经完全掌握了呢?


本文地址:http://www.phprm.com/frame/php1003532.html

转载随意,但请附上文章地址:-)

标签:none

发表留言