程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> PHP獲取QQ郵箱好友的具體代碼講解

PHP獲取QQ郵箱好友的具體代碼講解

編輯:關於PHP編程

目前,大家都在使用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="ts"svalue="(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郵箱好友的代碼的介紹,大家是否已經完全掌握了呢?


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved