注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

@fc_lamp

关注Web应用解决方案MySql/PHP/Python一盏名为"飞川"的灯~

 
 
 

日志

 
 

php模拟 163邮箱登录  

2010-10-21 18:21:00|  分类: Web技术-Php |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
下面这个类,修改了部分代码,并且加上了必要的注释.

源代码来源于:http://topic.csdn.net/u/20101007/23/90d1bd3d-9b28-4710-ae1d-f7e795d094b3.html

<?php
//定义COOKIES存放的路径,要有操作的权限,tempnam函数建立一个具有唯一文件名的文件
define ( "COOKIEJAR", tempnam ( ini_get ( "upload_tmp_dir" ), "cookie" ) );
define ( "TIMEOUT", 1000 ); //超时设定


class login_163
{
    /**
     * 检测登录
     * @param $user
     * @param $password
     * @return unknown_type
     */
    function checklogin($user, $password)
    {
        $ch = curl_init ();
        curl_setopt ( $ch, CURLOPT_SSL_VERIFYPEER, false );
        
        /*****/
        //设置请求地址
        /*****/
        curl_setopt ( $ch, CURLOPT_URL, "http://reg.163.com/logins.jsp?type=1&product=mail163&url=http://entry.mail.163.com/coremail/fcg/ntesdoor2?lightweight%3D1%26verifycookie%3D1%26language%3D-1%26style%3D1" );
        
        /*****/
        //设置请求方式为POST
        /*****/
        curl_setopt ( $ch, CURLOPT_POST, 1 );
        
        /*****
            设置请求传输的数据
            完整的数据可以是数组,可以是URL字符串,如果你要传文件那么:
            文件名前面加上一个@,并使用完整的路径。
            当然:数据是数组或文件那么: Content-Type 头信息 的值要为:“ multipart/form-data”
         *****/
        curl_setopt ( $ch, CURLOPT_POSTFIELDS, "username=" . $user . "&password=" . $password . "&type=1" );
        
        /*****
            设置连接断开时,所有COOKIE的存放地
         *****/
        curl_setopt ( $ch, CURLOPT_COOKIEJAR, COOKIEJAR );
        curl_setopt ( $ch, CURLOPT_COOKIEFILE, COOKIEJAR );
        /*****/
        //最大的请求时间
        /*****/
        curl_setopt ( $ch, CURLOPT_TIMEOUT, TIMEOUT );
        
        ob_start (); //开启缓冲
        curl_exec ( $ch );
        $contents = ob_get_contents ();
        ob_end_clean ();
        curl_close ( $ch );
        
        if (strpos ( $contents, "跳转提示" ) !== false)
        {//注:strpos函数不能查找出完全一致的两个字符串,如strpos('abc','abc'),将返回FALSE
            return 1;
        }
        return 0;
    }
    
    /**
     * 获取联系人
     * @param $user
     * @param $password
     * @return unknown_type
     */
    function getcontacts($user, $password)
    {
        if (! $this->checklogin ( $user, $password ))
        {
            die ( '登录失败。' );
        }
        $this->_get_cookie ( $user );
        $cookie_sid = $this->_get_cookie_sid ( COOKIEJAR );
        if (! $cookie_sid)
        {
            die ( '无法登录' );
        }
        $ch = curl_init ();
        curl_setopt ( $ch, CURLOPT_URL, "http://g1a126.mail.163.com/a/s?sid=" . $cookie_sid . "&func=global:sequential" );
        curl_setopt ( $ch, CURLOPT_COOKIEFILE, COOKIEJAR );
        curl_setopt ( $ch, CURLOPT_HTTPHEADER, array ("Content-Type: application/xml" ) );
        $str = "<?xml version=\"1.0\"?><object><array name=\"items\"><object><string name=\"func\">pab:searchContacts</string><object name=\"var\"><array name=\"order\"><object><string name=\"field\">FN</string><boolean name=\"ignoreCase\">true</boolean></object></array></object></object><object><string name=\"func\">user:getSignatures</string></object><object><string name=\"func\">pab:getAllGroups</string></object></array></object>";
        curl_setopt ( $ch, CURLOPT_POST, 1 );
        curl_setopt ( $ch, CURLOPT_POSTFIELDS, $str );
        curl_setopt ( $ch, CURLOPT_TIMEOUT, TIMEOUT );
        ob_start ();
        curl_exec ( $ch );
        $contents = ob_get_contents ();
        ob_end_clean ();
        curl_close ( $ch );
        $pattern = "/([\\w_-])+@([\\w])+([\\w.]+)/";
        if (preg_match_all ( $pattern, $contents, $tmpres, PREG_PATTERN_ORDER ))
        {
            $result = array_unique ( $tmpres [0] );
        }
        return $result;
    }
    
    /**
     * 重新从163服务器上获取必要的COOKIE信息(认证)
     * @param $user
     * @return unknown_type
     */
    function _get_cookie($user)
    {
        $ch = curl_init ();
        curl_setopt ( $ch, CURLOPT_URL, "http://entry.mail.163.com/coremail/fcg/ntesdoor2?lightweight=1&verifycookie=1&language=-1&style=1&username=$user" );
        curl_setopt ( $ch, CURLOPT_COOKIEFILE, COOKIEJAR );
        curl_setopt ( $ch, CURLOPT_COOKIEJAR, COOKIEJAR );
        ob_start ();
        curl_exec ( $ch );
        $contents = ob_get_contents ();
        ob_end_clean ();
        curl_close ( $ch );
    }
    /**
     * 解析出COOKIE SID号出来
     * @param $file
     * @return $cookie_sid
     */
    function _get_cookie_sid($file)
    {
        $cookie_sid = FALSE;
        $cookie_line = file ( COOKIEJAR );
        foreach ( $cookie_line as $cookie_info )
        {
            if (strpos ( $cookie_info, "\t" ))
            {
                $cookie_array = explode ( "\t", $cookie_info );
                foreach ( $cookie_array as $key => $value )
                {
                    if (strstr ( $value, 'Coremail' ))
                    {
                        $sid_key = $key + 1;
                        $cookie_sid = substr ( trim ( $cookie_array [$sid_key] ), - 32 );
                        break 2; //跳出整个外循环
                    }
                }
            }
        }
        return $cookie_sid;
    }
}#end class

//Deom
$res = array();
$mail163 = new login_163();
$res = $mail163->getcontacts('xxx@163.com','xxxx');

print_R($res);

  评论这张
 
阅读(981)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017