php 模拟GMAIL,HOTMAIL(MSN),YAHOO,163,126邮箱登录(原创) 本帖最后由 hudie631489527 于 2010-10-07 23:18:31 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 2.HOTMAIL(MSN)<?phpdefine( "COOKIEJAR", tempnam( ini_get( "upload_tmp_dir" ), "cookie" ) ); //定义COOKIES存放的路径,要有操作的权限define( "TIMEOUT", 1000 ); //超时设定class MSN{ function getAddressList($username, $password) { //第一步:模拟抓取登录页面的数据,并记下cookies $cookies = array(); $ch = curl_init(); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_URL, "http://login.live.com/login.srf?wa=wsignin1.0&rpsnv=11&ct=".time()."&rver=6.0.5285.0&wp=MBI&wreply=http:%2F%2Fmail.live.com%2Fdefault.aspx&lc=2052&id=64855&mkt=en"); curl_setopt($ch, CURLOPT_COOKIEJAR, COOKIEJAR); curl_setopt($ch, CURLOPT_TIMEOUT, TIMEOUT); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $str = curl_exec($ch); curl_close($ch); //参数的分析 $matches = array(); preg_match('/<input\s*type="hidden"\s*name="PPFT"\s*id="(.*?)"\s*value="(.*?)"\s*\/>/i', $str, $matches); $PPFT = $matches[2]; preg_match('/srf_sRBlob=\'(.*?)\';/i', $str, $matches); $PPSX = $matches[1]; $type = 11; $LoginOptions = 3; $Newuser = 1; $idsbho = 1; $i2 = 1; $i12 = 1; $i3 = '562390'; $PPSX = 'Pa'; //合并参数 $postfiles = "login=".$username."&passwd=".$password."&type=".$type."&LoginOptions=".$LoginOptions."&Newuser=".$Newuser."&idsbho=".$idsbho."&i2=".$i2."&i3=".$i3."&PPFT=".$PPFT."&PPSX=".$PPSX."&i12=1"; //第二步:开始登录 $ch = curl_init(); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_COOKIEFILE, COOKIEJAR); curl_setopt($ch, CURLOPT_URL, 'https://login.live.com/ppsecure/post.srf?wa=wsignin1.0&rpsnv=11&ct='.(time()+5).'&rver=6.0.5285.0&wp=MBI&wreply=http:%2F%2Fmail.live.com%2Fdefault.aspx&lc=2052&id=64855&mkt=en&bk='.(time()+715)); //此处的两个time()是为了模拟随机的时间 curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $postfiles); curl_setopt($ch, CURLOPT_COOKIEJAR, COOKIEJAR); //curl_setopt($ch, CURLOPT_HEADER, 1); curl_setopt($ch, CURLOPT_TIMEOUT, TIMEOUT); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $content = curl_exec($ch); curl_close($ch); if( stripos($content,'WLWorkflow') !== FALSE ) { //WLWorkflow登录页面JS return false; //登录失败 } //获取location链接 $matches = array(); preg_match('/window.location.replace\(\"(.*?)\"\)/i', $content, $matches); $url_contiune_1 = $matches[1]; //接下来的链接 if(!$url_contiune_1) { return false; } //第三步: 进入引导页面 $ch = curl_init(); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_COOKIEFILE, COOKIEJAR); curl_setopt($ch, CURLOPT_URL, $url_contiune_1); curl_setopt($ch, CURLOPT_COOKIEJAR, COOKIEJAR); curl_setopt($ch, CURLOPT_HEADER, 1); curl_setopt($ch, CURLOPT_TIMEOUT, TIMEOUT); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $content_2 = curl_exec($ch); //echo $postfiles; curl_close($ch); //获取redicturl链接 $matches = array(); preg_match('/<a\s*href=\"(.*?)\"\s*>/i', $content_2, $matches); $url_contiune_2 = $matches[1]; //接下来的链接 if(!$url_contiune_2) { return false; } //跳过进入首页 /* $ch = curl_init(); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_COOKIEFILE, COOKIEJAR); curl_setopt($ch, CURLOPT_URL, $url_contiune_2); curl_setopt($ch, CURLOPT_COOKIEJAR, COOKIEJAR); curl_setopt($ch, CURLOPT_HEADER, 1); curl_setopt($ch, CURLOPT_TIMEOUT, 1000); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $content_3 = curl_exec($ch); curl_close($ch); */ //获取邮箱请求基址 读取host $matches = array(); preg_match('/(.*?)\/\/(.*?)\/(.*?)/i', $url_contiune_2, $matches); $url_contiune_3 = trim($matches[1]).'//'.trim($matches[2]); //首页定义的站点基址 $url_4 = $url_contiune_3.'/mail/ContactMainLight.aspx?n=435707983'; //n后面的数字是随机数 if(!$url_contiune_3) { return false; } //第四步: 开始获取邮箱联系人 //base $url_4 $ch = curl_init(); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_COOKIEFILE, COOKIEJAR); curl_setopt($ch, CURLOPT_URL, $url_4); curl_setopt($ch, CURLOPT_TIMEOUT, TIMEOUT); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $str = curl_exec($ch); //分析数据 (此处的数据因为hotmail的JS处理机制,所以在页面上看不出来,源码上可以看到数据) return $this->hanlde_date($str); } function hanlde_date($data) { $new_str = array(); if(!empty($data)) { $ops_start = stripos($data,'ic_control_data'); $ops_end = stripos($data,';',$ops_start); $new_str = substr($data, $ops_start + strlen('ic_control_data = '), $ops_end - $ops_start - strlen('ic_control_data = ') ); return $new_str; //返回JSON对象 } else { return array(); } }}$msn = new MSN;$res = $msn->getAddressList('[email protected]','123456');echo $res;?><script type="text/javascript">var data = <?php echo $res; ?>alert(data['ic1'][6]);alert(data['ic1'][3]);</script> 3.YAHOO<?phpdefine( "COOKIEJAR", tempnam( ini_get( "upload_tmp_dir" ), "cookie" ) ); //定义COOKIES存放的路径,要有操作的权限define( "TIMEOUT", 1000 ); //超时设定class YAHOO{ private function login($username, $password) { //第一步:模拟抓取登录页面的数据,并记下cookies $cookies = array(); $matches = array(); //获取表单 $login_url = "https://login.yahoo.com/config/login?.src=fpctx&.intl=us&.done=http%3A%2F%2Fwww.yahoo.com%2F"; $ch = curl_init($login_url); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_COOKIEJAR, COOKIEJAR); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $contents = curl_exec($ch); curl_close($ch); //构造参数 $name = array('tries','src','md5','hash','js','last','promo','intl','bypass','partner','u','v','challenge','yplus','emailCode','pkg','stepid','ev','hasMsgr','chkP','done','pd','pad','aad'); $postfiles = array(); $matches = array(); foreach($name as $v) { preg_match('/<input\s*type="hidden"\s*name=".'.$v.'"\s*value="(.*?)"\s*>/i', $contents, $matches); if(!empty($matches)) { $postfiles['.'.$v] = $matches[1]; $matches = array(); } if($v == 'pd') { $postfiles['.'.$v] = urlencode($postfiles['.'.$v]); } } $postfiles['pad'] = 5; $postfiles['aad'] = 6; $postfiles['login'] = urlencode($username); $postfiles['passwd'] = $password; $postfiles['.persistent'] = 'y'; $postfiles['save'] = ''; $postfiles['.done'] = urlencode($postfiles['.done']); //$postfiles['.pd'] = urlencode($postfiles['.pd']); $postargs = ''; foreach($postfiles as $k => $v){ $postargs .= $k.'='.$v.'&'; } $postargs = substr($postargs,0,-1); $request = "https://login.yahoo.com/config/login?"; //开始登录 $ch = curl_init(); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_URL, $request); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $postargs); curl_setopt($ch, CURLOPT_COOKIEJAR, COOKIEJAR); curl_setopt($ch, CURLOPT_TIMEOUT, TIMEOUT); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $contents = curl_exec($ch); curl_close($ch); if (stripos($contents,'submit') != FALSE) { return 0; } return 1; } //获取邮箱通讯录-地址 public function getAddressList($username, $password) { if (!$this->login($username, $password)) { return 0; } //开始进入模拟抓取 //get mail list from the page information username && emailaddress $url = "http://address.mail.yahoo.com/"; $data = array( ); if ( !$data = $this->hanlde_date( $url, $names, $emails) ) { return FALSE; } echo '<pre>'; print_r($data); return $data; } function hanlde_date( $url, &$names, &$emails) { $ch = curl_init( ); curl_setopt( $ch, CURLOPT_COOKIEFILE, COOKIEJAR ); curl_setopt( $ch, CURLOPT_URL, $url ); curl_setopt( $ch, CURLOPT_TIMEOUT, TIMEOUT ); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $contents = curl_exec($ch); curl_close($ch); $temparr = array(); preg_match_all('/InitialContacts\s*=\s*(.*?);/i',$contents,$temparr); return $temparr[1][0].';'; //匹配出JSON对象数组 }}$yahoo = new YAHOO;$res = $yahoo->getAddressList('[email protected]','123456');?><script type="text/javascript">var data = <?php echo $res; ?>var obj1 = data[0];alert(data[0]['contactName']);</script> 注:163,126在网上的源码都有,在此就不一一的列出来了哦当然此代码是自己个人的拙作,只是为了给大家此类问题做一个指引 msn的获取结果再处理一下就好了,结果比较凌乱 主要是 Curl 和 正则。不错。 楼主还在不在?我正想要这些,测试了一晚,gmail和msn都可以,就是yahoo返回的数据不知道怎么处理,yahoo返回的格式是这样的[{"guid":"","contactId":"1",...}{...}{...}]我要转成php数组,但当成json数据转数组也不行,请问怎么处理yahoo这个数据?谁知道? 这三个返回来的都是json数据,也是比较好处理的啊,它就是一个json数组用数组的形式访问就行了 还以为对大家没有啥用,过两天把JSON结果处理一下,在贴上来 為什麼我用 php的foreach取數組會出錯?有[]個號好象不能用json處理,php怎麼處理? 楼主帮我看看php怎么处理yahoo返回的数据,===============$yahoo = new YAHOO;$email_json = $yahoo->getAddressList($email, $password);foreach($email_json as $key => $value){}===============$email_json正常返回两个我的yahoo好友,格式为[{"guid":"","contactId":"1",...},{...}]但是我在用foreach读取时出错:Warning: Invalid argument supplied for foreach() in 我用json_decode($email_json, true)转数组再用foreach读也是出同样的错,请问我到底怎么处理返回的数据?试了一晚都没解决。 我改用js来读取yahoo的返回数据了,请问楼主有QQ找好友的吗?我想再要一个QQ的 我分享一下我处理获取结果的代码:$msn = new MSN;$email_json = $msn->getAddressList($email, $password);$email_arr = json_decode($email_json, true);foreach($email_arr as $key => $value){ if(count($value)==19){ echo "<p style='margin:10px;'>名字:".$value[3]."/邮箱:".$value[6]."</p>"; }}==========================$gamil = new GMAIL;$email_json = $gamil->getAddressList($email, $password);$email_arr = json_decode($email_json, true);$email2_arr=$email_arr['Body'];foreach($email2_arr['Contacts'] as $key => $value){ echo "<p style='margin:10px;'>名字:".$value['DisplayName']."/邮箱:".$value['Emails'][0]['Address']."</p>";}=================yahoo的:<?php$yahoo = new YAHOO;$email_json = $yahoo->getAddressList($email, $password);?><script type="text/javascript">var data = <?php echo $email_json; ?>for(var i=0;i<data.length;i++){ alert("名字:"+data[i]['contactName']+"/邮箱:"+data[i]['email']);}</script> hao hao hao a 刚开始学PHP的飘过,希望以后会有帮助,先留位标记一下先 看到有朋友说163.com的登录方式,这个好像网上有,不过比较难找,还有结果的处理方式,由于今天QQ邮箱有些问题,我的JS文件拿不下来,所以明天晚上在给大家 操作GAMIL,HOTMAIL,YAHOO邮箱返回的JOSN的JS(在下JS不熟悉,通常用JQUERY)<html><head><script language="javascript" type="text/javascript" src="script_mail.js"></script><script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js"></script></head><body><div id="showData"></div></body></html><script type="text/javascript">var data = [code=PHP]<?php echo $res; ?>;handleDate(data, 'showData' , 'yahoo');</script>[/code]$res是上面PHP获取的JSON数据script_mail.js文件内容//操作function handleDate(data, id, t) { var topObj = $("#"+id); //form var formObj = $("<form>"); //ul var ulObj = $("<ul>"); ulObj.attr('id', 'email_ul'); switch(t) { case 'msn' : for( i in data) { //尋找ic(1~f)之間的資料 if(i.indexOf('icTm') == -1) { //用戶名 //alert(data[i][3]); //郵箱 //alert(data[i][6]); //按用戶名和用戶郵箱創建li, 返回LI對象 var LiInput = createLiInput(data[i][3], data[i][6], i); LiInput.appendTo(ulObj); } } break; case 'gmail': for( i in data.Body.Contacts) { var LiInput = createLiInput(data.Body.Contacts[i]['DisplayName'], data.Body.Contacts[i]['Emails'][0]['Address'], i); LiInput.appendTo(ulObj); } break; case 'yahoo': for( i in data) { var LiInput = createLiInput(data[i]['contactName'], data[i]['email'], i); LiInput.appendTo(ulObj); } break; default: break; } ulObj.appendTo(formObj); var str = '<b>全選</b><input type="checkbox" name="chkall" id="chkall" onclick="checkAll(this.form, \'email\')" /><input type="button" value="確認" onclick="submitCheck_hd()" />'; formObj.append(str); formObj.appendTo(topObj);}function createLiInput(username, email , i) { var objLi = $("<li>"); objLi.attr('name', i+'_li');//name objLi.attr('id', i+'_li');//ID var ie = !-[1,]; //IE的判定 if(ie) { var objInput = $("<input name='email[]' type='checkbox' />"); }else { var objInput = $("<input />"); objInput.attr('name', 'email[]'); objInput.attr('type', 'checkbox');//type } objInput.attr('id', i);//ID objInput.attr('value', email); var objText = $('<b>'+username+'</b>'); //objLi.appendChild(objInput); objInput.appendTo(objLi); objText.appendTo(objLi); return objLi;} 163邮箱的获取源码,由于没有用到,在此也就没有细化,返回的数据非JSON此文件在GBK编码下可用,因为对于登录的判断有一个转码过程,大家也可以修改163源码<?phpdefine( "COOKIEJAR", tempnam( ini_get( "upload_tmp_dir" ), "cookie" ) ); //定义COOKIES存放的路径,要有操作的权限define( "TIMEOUT", 1000 ); //超时设定class contacts163{ 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" ); curl_setopt( $ch, CURLOPT_POST, 1 ); curl_setopt( $ch, CURLOPT_POSTFIELDS, "username=".$user."&password=".$password."&type=1" ); curl_setopt( $ch, CURLOPT_COOKIEJAR, COOKIEJAR ); curl_setopt( $ch, CURLOPT_TIMEOUT, TIMEOUT ); ob_start( ); curl_exec( $ch ); $contents = ob_get_contents( ); ob_end_clean( ); curl_close( $ch ); $contents = iconv("UTF-8","GBK",$contents); //die($contents); //echo "<textarea>".iconv("UTF-8","GBK",$contents)."</textarea>"; //echo strip_tags($contents); if ( strpos( $contents, "登录成功" ) !== false ) { return 1; } return 0; } function getcontacts( $user, $password, &$result ) { if ( !$this->checklogin( $user, $password ) ) { return 0; } $bRet = $this->_getcookie( $user ); $bRet = $this->readcookies( COOKIEJAR, $cookies ); $cookieid = substr( trim( $cookies['Coremail'] ), -32 ); if ( !$cookieid ) { return 0; } $ch = curl_init( ); curl_setopt( $ch, CURLOPT_URL, "http://g1a126.mail.163.com/a/s?sid=".$cookieid."&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 1; } function _getcookie( $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 ); } function readcookies( $file, &$result ) { $fp = fopen( $file, "r" ); while ( !feof( $fp ) ) { $buffer = fgets( $fp, 4096 ); $tmp = split( "\t", $buffer ); $result[trim( $tmp[5] )] = trim( $tmp[6] ); } return 1; }}$res = array();$mail163 = new contacts163;$mail163->getcontacts('[email protected]',123456, &$res);print_R($res);?> 到了弄这个的时候才发现,UCH里面的这个地方是用漫游型式做的,让人很是无解,啥都改不了!唉,既然都答应了说可以,现在实际情况不行了,所以觉得不好意思,为了快速解决这问题,在GOOGLE,百度上搜了个遍,结果又出忽意料,就一个126邮箱的开源例子,其它的都没有,有一牛哥留着QQ说要其它的源码,可以加QQ买!不对此人评论了!俺花了点时间,整了整,结果就幸运的弄出来了几个,因为时间有限,目前手上的项目一直在弄,所以就没有管其它的,现在给出 GMAIL,HOTMAIL(MSN),YAHOO的邮箱联系人的PHP源代码 强烈推荐台湾中原大学的php教程。 诙谐幽默,那绝对是大陆的教程没法比的 请问下XAMPP的配置问题! phpwind学习交流,非诚勿扰 PHP怎么操作oracle语句 PHP输出图片出错,求教 thinkphp修改配置后,前台页面无更新 php初学者,想请大家帮忙 付费求助:帮忙解决 title标题调不出问题 php如何获取地址栏内的信息 请教高人 微信微网站怎么记录什么人转发了这篇文章 求源码 关于twitter的更新
define( "COOKIEJAR", tempnam( ini_get( "upload_tmp_dir" ), "cookie" ) ); //定义COOKIES存放的路径,要有操作的权限
define( "TIMEOUT", 1000 ); //超时设定
class MSN
{ function getAddressList($username, $password)
{
//第一步:模拟抓取登录页面的数据,并记下cookies
$cookies = array();
$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_URL, "http://login.live.com/login.srf?wa=wsignin1.0&rpsnv=11&ct=".time()."&rver=6.0.5285.0&wp=MBI&wreply=http:%2F%2Fmail.live.com%2Fdefault.aspx&lc=2052&id=64855&mkt=en");
curl_setopt($ch, CURLOPT_COOKIEJAR, COOKIEJAR);
curl_setopt($ch, CURLOPT_TIMEOUT, TIMEOUT);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$str = curl_exec($ch);
curl_close($ch); //参数的分析
$matches = array();
preg_match('/<input\s*type="hidden"\s*name="PPFT"\s*id="(.*?)"\s*value="(.*?)"\s*\/>/i', $str, $matches);
$PPFT = $matches[2];
preg_match('/srf_sRBlob=\'(.*?)\';/i', $str, $matches);
$PPSX = $matches[1];
$type = 11;
$LoginOptions = 3;
$Newuser = 1;
$idsbho = 1;
$i2 = 1;
$i12 = 1;
$i3 = '562390';
$PPSX = 'Pa';
//合并参数
$postfiles = "login=".$username."&passwd=".$password."&type=".$type."&LoginOptions=".$LoginOptions."&Newuser=".$Newuser."&idsbho=".$idsbho."&i2=".$i2."&i3=".$i3."&PPFT=".$PPFT."&PPSX=".$PPSX."&i12=1";
//第二步:开始登录
$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_COOKIEFILE, COOKIEJAR);
curl_setopt($ch, CURLOPT_URL, 'https://login.live.com/ppsecure/post.srf?wa=wsignin1.0&rpsnv=11&ct='.(time()+5).'&rver=6.0.5285.0&wp=MBI&wreply=http:%2F%2Fmail.live.com%2Fdefault.aspx&lc=2052&id=64855&mkt=en&bk='.(time()+715)); //此处的两个time()是为了模拟随机的时间
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postfiles);
curl_setopt($ch, CURLOPT_COOKIEJAR, COOKIEJAR);
//curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, TIMEOUT);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$content = curl_exec($ch);
curl_close($ch);
if( stripos($content,'WLWorkflow') !== FALSE ) { //WLWorkflow登录页面JS
return false; //登录失败
}
//获取location链接
$matches = array();
preg_match('/window.location.replace\(\"(.*?)\"\)/i', $content, $matches);
$url_contiune_1 = $matches[1]; //接下来的链接
if(!$url_contiune_1) {
return false;
}
//第三步: 进入引导页面
$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_COOKIEFILE, COOKIEJAR);
curl_setopt($ch, CURLOPT_URL, $url_contiune_1);
curl_setopt($ch, CURLOPT_COOKIEJAR, COOKIEJAR);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, TIMEOUT);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$content_2 = curl_exec($ch);
//echo $postfiles;
curl_close($ch);
//获取redicturl链接
$matches = array();
preg_match('/<a\s*href=\"(.*?)\"\s*>/i', $content_2, $matches);
$url_contiune_2 = $matches[1]; //接下来的链接
if(!$url_contiune_2) {
return false;
}
//跳过进入首页
/*
$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_COOKIEFILE, COOKIEJAR);
curl_setopt($ch, CURLOPT_URL, $url_contiune_2);
curl_setopt($ch, CURLOPT_COOKIEJAR, COOKIEJAR);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 1000);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$content_3 = curl_exec($ch);
curl_close($ch);
*/
//获取邮箱请求基址 读取host
$matches = array();
preg_match('/(.*?)\/\/(.*?)\/(.*?)/i', $url_contiune_2, $matches);
$url_contiune_3 = trim($matches[1]).'//'.trim($matches[2]); //首页定义的站点基址
$url_4 = $url_contiune_3.'/mail/ContactMainLight.aspx?n=435707983'; //n后面的数字是随机数
if(!$url_contiune_3) {
return false;
}
//第四步: 开始获取邮箱联系人
//base $url_4
$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_COOKIEFILE, COOKIEJAR);
curl_setopt($ch, CURLOPT_URL, $url_4);
curl_setopt($ch, CURLOPT_TIMEOUT, TIMEOUT);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$str = curl_exec($ch);
//分析数据 (此处的数据因为hotmail的JS处理机制,所以在页面上看不出来,源码上可以看到数据)
return $this->hanlde_date($str);
}
function hanlde_date($data) {
$new_str = array();
if(!empty($data)) {
$ops_start = stripos($data,'ic_control_data');
$ops_end = stripos($data,';',$ops_start);
$new_str = substr($data, $ops_start + strlen('ic_control_data = '), $ops_end - $ops_start - strlen('ic_control_data = ') );
return $new_str; //返回JSON对象
} else {
return array();
}
}
}$msn = new MSN;$res = $msn->getAddressList('[email protected]','123456');echo $res;
?><script type="text/javascript">
var data = <?php echo $res; ?>alert(data['ic1'][6]);
alert(data['ic1'][3]);
</script>
define( "COOKIEJAR", tempnam( ini_get( "upload_tmp_dir" ), "cookie" ) ); //定义COOKIES存放的路径,要有操作的权限
define( "TIMEOUT", 1000 ); //超时设定
class YAHOO
{ private function login($username, $password)
{
//第一步:模拟抓取登录页面的数据,并记下cookies
$cookies = array();
$matches = array();
//获取表单
$login_url = "https://login.yahoo.com/config/login?.src=fpctx&.intl=us&.done=http%3A%2F%2Fwww.yahoo.com%2F";
$ch = curl_init($login_url);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_COOKIEJAR, COOKIEJAR);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$contents = curl_exec($ch);
curl_close($ch);
//构造参数
$name = array('tries','src','md5','hash','js','last','promo','intl','bypass','partner','u','v','challenge','yplus','emailCode','pkg','stepid','ev','hasMsgr','chkP','done','pd','pad','aad');
$postfiles = array();
$matches = array();
foreach($name as $v) {
preg_match('/<input\s*type="hidden"\s*name=".'.$v.'"\s*value="(.*?)"\s*>/i', $contents, $matches);
if(!empty($matches)) {
$postfiles['.'.$v] = $matches[1];
$matches = array();
}
if($v == 'pd') {
$postfiles['.'.$v] = urlencode($postfiles['.'.$v]);
}
} $postfiles['pad'] = 5;
$postfiles['aad'] = 6;
$postfiles['login'] = urlencode($username);
$postfiles['passwd'] = $password;
$postfiles['.persistent'] = 'y';
$postfiles['save'] = '';
$postfiles['.done'] = urlencode($postfiles['.done']);
//$postfiles['.pd'] = urlencode($postfiles['.pd']);
$postargs = '';
foreach($postfiles as $k => $v){
$postargs .= $k.'='.$v.'&';
}
$postargs = substr($postargs,0,-1);
$request = "https://login.yahoo.com/config/login?";
//开始登录
$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_URL, $request);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postargs);
curl_setopt($ch, CURLOPT_COOKIEJAR, COOKIEJAR);
curl_setopt($ch, CURLOPT_TIMEOUT, TIMEOUT);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$contents = curl_exec($ch);
curl_close($ch); if (stripos($contents,'submit') != FALSE)
{
return 0;
}
return 1;
}
//获取邮箱通讯录-地址
public function getAddressList($username, $password)
{
if (!$this->login($username, $password))
{
return 0;
}
//开始进入模拟抓取
//get mail list from the page information username && emailaddress
$url = "http://address.mail.yahoo.com/";
$data = array( );
if ( !$data = $this->hanlde_date( $url, $names, $emails) )
{
return FALSE;
}
echo '<pre>';
print_r($data);
return $data;
}
function hanlde_date( $url, &$names, &$emails)
{
$ch = curl_init( );
curl_setopt( $ch, CURLOPT_COOKIEFILE, COOKIEJAR );
curl_setopt( $ch, CURLOPT_URL, $url );
curl_setopt( $ch, CURLOPT_TIMEOUT, TIMEOUT );
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$contents = curl_exec($ch);
curl_close($ch);
$temparr = array();
preg_match_all('/InitialContacts\s*=\s*(.*?);/i',$contents,$temparr);
return $temparr[1][0].';'; //匹配出JSON对象数组
}
}
$yahoo = new YAHOO;$res = $yahoo->getAddressList('[email protected]','123456');
?>
<script type="text/javascript">
var data = <?php echo $res; ?>
var obj1 = data[0];
alert(data[0]['contactName']);
</script> 注:163,126在网上的源码都有,在此就不一一的列出来了哦当然此代码是自己个人的拙作,只是为了给大家此类问题做一个指引
yahoo返回的格式是这样的[{"guid":"","contactId":"1",...}{...}{...}]
我要转成php数组,但当成json数据转数组也不行,请问怎么处理yahoo这个数据?谁知道?
===============
$yahoo = new YAHOO;
$email_json = $yahoo->getAddressList($email, $password);
foreach($email_json as $key => $value){}
===============
$email_json正常返回两个我的yahoo好友,格式为[{"guid":"","contactId":"1",...},{...}]
但是我在用foreach读取时出错:Warning: Invalid argument supplied for foreach() in
我用json_decode($email_json, true)转数组再用foreach读也是出同样的错,请问我到底怎么处理返回的数据?试了一晚都没解决。
请问楼主有QQ找好友的吗?我想再要一个QQ的
我分享一下我处理获取结果的代码:
$msn = new MSN;
$email_json = $msn->getAddressList($email, $password);
$email_arr = json_decode($email_json, true);
foreach($email_arr as $key => $value){
if(count($value)==19){
echo "<p style='margin:10px;'>名字:".$value[3]."/邮箱:".$value[6]."</p>";
}
}
==========================
$gamil = new GMAIL;
$email_json = $gamil->getAddressList($email, $password);
$email_arr = json_decode($email_json, true);
$email2_arr=$email_arr['Body'];
foreach($email2_arr['Contacts'] as $key => $value){
echo "<p style='margin:10px;'>名字:".$value['DisplayName']."/邮箱:".$value['Emails'][0]['Address']."</p>";
}
=================
yahoo的:
<?php
$yahoo = new YAHOO;
$email_json = $yahoo->getAddressList($email, $password);
?>
<script type="text/javascript">
var data = <?php echo $email_json; ?>
for(var i=0;i<data.length;i++){
alert("名字:"+data[i]['contactName']+"/邮箱:"+data[i]['email']);
}
</script>
<html>
<head>
<script language="javascript" type="text/javascript" src="script_mail.js"></script>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js"></script></head>
<body>
<div id="showData"></div>
</body>
</html>
<script type="text/javascript">
var data = [code=PHP]<?php echo $res; ?>;
handleDate(data, 'showData' , 'yahoo');</script>[/code]
$res是上面PHP获取的JSON数据
script_mail.js文件内容
//操作
function handleDate(data, id, t) {
var topObj = $("#"+id);
//form
var formObj = $("<form>");
//ul
var ulObj = $("<ul>");
ulObj.attr('id', 'email_ul');
switch(t) {
case 'msn' :
for( i in data) {
//尋找ic(1~f)之間的資料
if(i.indexOf('icTm') == -1) {
//用戶名
//alert(data[i][3]);
//郵箱
//alert(data[i][6]);
//按用戶名和用戶郵箱創建li, 返回LI對象
var LiInput = createLiInput(data[i][3], data[i][6], i);
LiInput.appendTo(ulObj);
}
}
break;
case 'gmail':
for( i in data.Body.Contacts) {
var LiInput = createLiInput(data.Body.Contacts[i]['DisplayName'], data.Body.Contacts[i]['Emails'][0]['Address'], i);
LiInput.appendTo(ulObj);
}
break;
case 'yahoo':
for( i in data) {
var LiInput = createLiInput(data[i]['contactName'], data[i]['email'], i);
LiInput.appendTo(ulObj);
}
break;
default:
break;
}
ulObj.appendTo(formObj);
var str = '<b>全選</b><input type="checkbox" name="chkall" id="chkall" onclick="checkAll(this.form, \'email\')" /><input type="button" value="確認" onclick="submitCheck_hd()" />';
formObj.append(str);
formObj.appendTo(topObj);
}
function createLiInput(username, email , i) {
var objLi = $("<li>");
objLi.attr('name', i+'_li');//name
objLi.attr('id', i+'_li');//ID
var ie = !-[1,]; //IE的判定
if(ie) {
var objInput = $("<input name='email[]' type='checkbox' />");
}else {
var objInput = $("<input />");
objInput.attr('name', 'email[]');
objInput.attr('type', 'checkbox');//type
}
objInput.attr('id', i);//ID
objInput.attr('value', email);
var objText = $('<b>'+username+'</b>');
//objLi.appendChild(objInput);
objInput.appendTo(objLi);
objText.appendTo(objLi);
return objLi;
}
此文件在GBK编码下可用,因为对于登录的判断有一个转码过程,大家也可以修改
163源码
<?php
define( "COOKIEJAR", tempnam( ini_get( "upload_tmp_dir" ), "cookie" ) ); //定义COOKIES存放的路径,要有操作的权限
define( "TIMEOUT", 1000 ); //超时设定class contacts163
{ 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" );
curl_setopt( $ch, CURLOPT_POST, 1 );
curl_setopt( $ch, CURLOPT_POSTFIELDS, "username=".$user."&password=".$password."&type=1" );
curl_setopt( $ch, CURLOPT_COOKIEJAR, COOKIEJAR );
curl_setopt( $ch, CURLOPT_TIMEOUT, TIMEOUT );
ob_start( );
curl_exec( $ch );
$contents = ob_get_contents( );
ob_end_clean( );
curl_close( $ch );
$contents = iconv("UTF-8","GBK",$contents);
//die($contents);
//echo "<textarea>".iconv("UTF-8","GBK",$contents)."</textarea>";
//echo strip_tags($contents); if ( strpos( $contents, "登录成功" ) !== false )
{
return 1;
}
return 0;
} function getcontacts( $user, $password, &$result )
{
if ( !$this->checklogin( $user, $password ) )
{
return 0;
}
$bRet = $this->_getcookie( $user );
$bRet = $this->readcookies( COOKIEJAR, $cookies );
$cookieid = substr( trim( $cookies['Coremail'] ), -32 ); if ( !$cookieid )
{
return 0;
}
$ch = curl_init( );
curl_setopt( $ch, CURLOPT_URL, "http://g1a126.mail.163.com/a/s?sid=".$cookieid."&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 1;
} function _getcookie( $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 );
}
function readcookies( $file, &$result )
{
$fp = fopen( $file, "r" );
while ( !feof( $fp ) )
{
$buffer = fgets( $fp, 4096 );
$tmp = split( "\t", $buffer );
$result[trim( $tmp[5] )] = trim( $tmp[6] );
}
return 1;
}}
$res = array();$mail163 = new contacts163;$mail163->getcontacts('[email protected]',123456, &$res);print_R($res);?>