PHP 获取MSN好友列表的代码(2009-05-14测试通过)
2015-01-24信息快讯网
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh" lang="zh"> <head> <title>MSN 测试</title> <meta name="generator" content="Bluefish 1.0.6"/> <meta name="keywords" content="MSN"/> <meta name="description" content="MSN test"/> <meta http-equiv="content-type" content="text/html; charset=UTF-8"/> <style type="text/css"> <!-- div { font-family: arial, helvetica, sans-serif; font-size : 13px ; margin: 10px; padding: 2px 10px 1px; background-color: #C60; color: #FFFFFF; border-top: 1px solid #C90; border-left: 1px solid #C90; border-bottom: 1px solid #333; border-right: 1px solid #333; } a:link { color: #00FFBE; } --></style> </head> <body> <div> <?php # filename: fm.php # purpose: get MSN contact list # author: http://qartis.com/?qmsn modified by Druggo $username = $_POST['username']; $password = $_POST['password']; $debug = 0; $trid = 0; $proto = "MSNP10"; # start here echo "通讯协议 $proto<br/>"; echo "开始登录<br/>"; # login now $sbconn = fsockopen("messenger.hotmail.com",1863) or die("Can't connect to MSN server"); flush(); data_out("VER $trid $proto CVR0"); data_in(); data_out("CVR $trid 0x0409 winnt 5.1 i386 MSNMSGR 8.0.0812 MSMSGS $username"); data_in(); data_out("USR $trid TWN I $username"); $temp = data_in(); if (!stristr($temp,":")){ if (substr($temp,0,3)==601){ #echo "Error: The MSN servers are currently unavailable."; echo "很不幸,MSN的服务器又挂了 >.<<br/>"; die(); } else { echo "连接失败!<br/>"; fclose($sbconn); die(); } } @fclose($sbconn); $temp_array = explode(" ",$temp); $temp_array = explode(":",$temp_array[3]); flush(); $sbconn = fsockopen($temp_array[0],$temp_array[1]) or die("error -_-#"); data_out("VER $trid $proto CVR0"); data_in(); flush(); data_out("CVR $trid 0x0409 winnt 5.1 i386 MSNMSGR 8.0.0812 MSMSGS $username"); data_in(); data_out("USR $trid TWN I $username"); $temp = data_in(); $temp_array = explode(" ",$temp); flush(); $TOKENSTRING = trim(end($temp_array)); #echo "authenticating"; echo "身份验证中……<br/>"; flush(); $nexus_socket = fsockopen("ssl://nexus.passport.com",443); fputs($nexus_socket,"GET /rdr/pprdr.asp HTTP/1.0\r\n\r\n"); while ($temp != "\r\n"){ $temp = fgets($nexus_socket,1024); if (substr($temp,0,12)=="PassportURLs"){ $urls = substr($temp,14); } } $temp_array = explode(",",$urls); $temp = $temp_array[1]; $temp = substr($temp,8); $temp_array = explode("/",$temp); @fclose($nexus_socket); $ssl_conn = fsockopen("ssl://".$temp_array[0],443); fputs($ssl_conn,"GET /{$temp_array[1]} HTTP/1.1\r\n"); fputs($ssl_conn,"Authorization: Passport1.4 OrgVerb=GET,OrgURL=http%3A%2F%2Fmessenger%2Emsn%2Ecom,sign-in=".urlencode($username).",pwd=$password,$TOKENSTRING\r\n"); fputs($ssl_conn,"User-Agent: MSMSGS\r\n"); fputs($ssl_conn,"Host: {$temp_array[0]}\r\n"); fputs($ssl_conn,"Connection: Keep-Alive\r\n"); fputs($ssl_conn,"Cache-Control: no-cache\r\n\r\n"); $temp = fgets($ssl_conn,512); if (rtrim($temp) == "HTTP/1.1 302 Found"){ #echo "redirection"; echo "开始重定向<br/>"; flush(); while ($temp != "\r\n"){ $temp = fgets($ssl_conn,256); if (substr($temp,0,9)=="Location:"){ $temp_array = explode(":",$temp); $temp_array = explode("/",trim(end($temp_array))); break; } } @fclose($ssl_conn); $ssl_conn = fsockopen("ssl://".$temp_array[2],443); fputs($ssl_conn,"GET /{$temp_array[3]} HTTP/1.1\r\n"); fputs($ssl_conn,"Authorization: Passport1.4 OrgVerb=GET,OrgURL=http%3A%2F%2Fmessenger%2Emsn%2Ecom,sign-in=".urlencode($username).",pwd=$password,$TOKENSTRING\r\n"); fputs($ssl_conn,"User-Agent: MSMSGS\r\n"); fputs($ssl_conn,"Host: {$temp_array[2]}\r\n"); fputs($ssl_conn,"Connection: Keep-Alive\r\n"); fputs($ssl_conn,"Cache-Control: no-cache\r\n\r\n"); } elseif (rtrim($temp)=="HTTP/1.1 401 Unauthorized"){ #echo "invalidcreds"; echo "验证失败!<br/>"; @fclose($ssl_conn); die(); } else { if (rtrim($temp) != "HTTP/1.1 200 OK"){ #echo "Unknown HTTP status code: $temp<br>"; echo "未知状态码 $temp<br/>"; flush(); die(); } else { #echo "set_bar_len30?"; } } while ($temp != "\r\n"){ $temp = fgets($ssl_conn,1024); if (substr($temp,0,19)=="Authentication-Info"){ $auth_info = $temp; $temp = fgets($ssl_conn,1024); if (substr($temp,0,14)!="Content-Length"){ $auth_info.= fgets($ssl_conn,1024); } break; } } @fclose($ssl_conn); $temp_array = explode("'",$auth_info); flush(); data_out("USR $trid TWN S {$temp_array[1]}"); flush(); $temp=data_in(); flush(); $time_since_initmsg = time(); while(!strstr($temp,"ABCHMigrated") && is_string(trim($temp))){ if (substr($temp,0,3)=="sid"){ $sid = trim(substr($temp,5)); } if (substr($temp,0,2)=="kv"){ $kv = trim(substr($temp,4)); } if (substr($temp,0,7)=="MSPAuth"){ $mspauth = trim(substr($temp,9)); flush(); } $temp = data_in(); } $temp = data_in(); #echo "authenticated<br />"; echo "验证通过!<br/>"; flush(); #data_out("LST 9 RL"); #data_in(); data_out("SYN $trid 0 0"); #echo "retreiving_contact_list<br />"; echo "正在获取好友列表……<br/><br/>"; flush(); stream_set_timeout($sbconn,0,125000); /* a lazy man doing this :D */ for($i=0;$i<160;$i++) # some say max is 150 { $temp = data_in(); switch (substr($temp, 0, 3)) { case "LST": $temp_array = explode(" ",$temp); $un = substr($temp_array[1], 2); $nn = substr($temp_array[2], 2); $nn1 = substr($temp_array[2], 0, 1); if($nn1 == "F") { echo "<a href=\"mailto:$un\">$nn</a><br/>"; } else { echo "曾经的好友: $un<br/>"; } #echo $temp."<br/>"; break; default: # no nothing break; } } echo "列表结束"; @fclose($sbconn); # end here # functions function data_out($data){ global $sbconn,$debug,$trid; fputs($sbconn,$data."\r\n"); $trid++; if ($debug && !empty($data)){ echo "> ".$data."<br>\r\n";} } function data_in(){ global $sbconn,$debug; $temp = fgets($sbconn,256); if ($debug && !empty($temp)){echo "< ".$temp."<br>\r\n";} return $temp; } ?> </div> </body> </html>
有需要的朋友可以参考下,大约要延迟几秒。
PHP获取MSN好友列表类的实现代码
php 模拟GMAIL,HOTMAIL(MSN),YAHOO,163,126邮箱登录的详细介绍
PHP session有效期session.gc_maxlifetime
PHP中break及continue两个流程控制指令区别分析
php中显示数组与对象的实现代码
PHP的变量总结 新手推荐
写php分页时出现的Fatal error的解决方法
php curl 登录163邮箱并抓取邮箱好友列表的代码(经测试)
php下连接mssql2005的代码
几款免费开源的不用数据库的php的cms
PHPCMS的使用小结
php递归实现无限分类生成下拉列表的函数
php用数组返回无限分类的列表数据的代码
PHP 飞信好友免费短信API接口开源版
php 仿Comsenz安装效果代码打包提供下载
php 获取select下拉列表框的值
dedecms系统的广告设置代码 基础版本
PHP 裁剪图片成固定大小代码方法
PHP 危险函数全解析
php 获取远程网页内容的函数
php 遍历数据表数据并列表横向排列的代码
不要轻信 PHP_SELF的安全问题
php中$_SERVER[PHP_SELF] 和 $_SERVER[SCRIPT_NAME]之间的区别
JieqiCMS 杰奇1.5注册机php源码
建站常用13种PHP开源CMS比较
php adodb连接mssql解决乱码问题
php MsSql server时遇到的中文编码问题
PHP 模拟登陆MSN并获得用户信息
PHP获取类中常量,属性,及方法列表的方法
php读取msn上的用户信息类
PHP静态新闻列表自动生成代码
用PHP生成html分页列表的代码
马伊琍与好友逛街露美腿 亲自接女儿显贤惠