PHP读取MSN上的用户信息类
一个可以获取msn上用户信息的代码
<?php$msn = new myMSN('h058@test.com', '123');// MSNv9class myMSN {private $server = 'messenger.hotmail.com';private $port = 1863;private $nexus = 'https://nexus.passport.com/rdr/pprdr.asp';private $sshLogin = 'login.live.com/login2.srf'; //loginnet.passport.com/login2.srfprivate $getCode = null;private $_ip = null;private $_port = null;private $connect = null;private $trID = 1;private $maxMessage = 4096;private $userName = null;private $passWord = null;private $debug = true;function myMSN($userName='', $passWord='') {if (!empty($userName) && !empty($passWord)) {$this->userName = $userName;//$this->passWord = urlencode($passWord);$this->passWord = $passWord;$this->startTalk();}}function put($data) {if ($this->isConnect()) {fputs($this->connect, $data);$this->trID++;if ($this->debug)print('<div style='color:green;font-size:13px;'>>>>{$data}</div>');}}function get() {if ($data = @fgets($this->connect, $this->maxMessage)) {if ($this->debug)print('<div style='color:red;font-size:13px;'><<<{$data}</div>');return $data;} else {return false;}}function isConnect() {if (!is_null($this->connect))return true;elsereturn false;}function close() {@fclose($this->connect);}function startTalk() {if ($this->connect = fsockopen($this->server, $this->port, $errno, $errstr, 2))$this->verTalk();}function verTalk() // MSN 协议协商 {$this->put('VER {$this->trID} MSNP9 CVR0 rn');$data = $this->get();//echo $data;if (false !== strripos($data, 'VER'))$this->envTalk();}function envTalk() // 环境协商 {$this->put('CVR {$this->trID} 0x0409 winnt 5.0 i386 MSNMSGR 7.0.0816 MSMSGS {$this->userName} rn');$data = $this->get();//echo $data;if (false !== strripos($data, 'CVR'))$this->reqTalk();}function reqTalk() // 请求确认 {$this->put('USR {$this->trID} TWN I {$this->userName} rn');$data = $this->get(); // XFR 3 NS 207.46.107.41:1863 0 65.54.239.210:1863 XFR 3 NS 207.46.107.25:1863 U D//echo $data;if (false !== strripos($data, 'XFR')) {list(, , , $serv) = explode(' ', $data); // 分析服务器list($ip, $port) = explode(':', $serv); // 分析IP和端口$this->_ip = $ip;$this->_port = $port;$this->reLink($ip, $port);} else {//echo $data; // USR 3 TWN S ct=1205292058,rver=5.0.3270.0,wp=FS_40SEC_0_COMPACT,lc=1033,id=507,ru=http:%2F%2Fmessenger.msn.com,tw=0,kpp=1,kv=4,ver=2.1.6000.1,rn=1lgjBfIL,tpf=b0735e3a873dfb5e75054465196398e0list(, , , , $this->getCode) = explode(' ', trim($data));//echo $data;if (empty($this->sshLogin))$this->reLoginTalk(); // 重新获取登陆服务器地址else$this->getLoginCode($this->sshLogin);}}function reLink($server, $port) // 重置连接 {$this->connect = null;$this->server = $server;$this->port = $port;$this->trID = 1;$this->startTalk();}function reLoginTalk() // 重新获取服务器地址 {$ch = curl_init($this->nexus);curl_setopt($ch, CURLOPT_HEADER, 1);curl_setopt($ch, CURLOPT_NOBODY, 1);curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);$header = curl_exec($ch);//print_r($header);curl_close($ch);preg_match ('/DALogin=(.*?),/', $header, $out); // 捕捉服务器登陆匹配//print_r($out);if (isset($out[1])) {$this->getLoginCode($out[1]);}else {//return false;exit('无法捕捉到登陆服务器的URL');}}function getLoginCode($slogin) // 获取登陆代码 {//echo($this->getCode);if (!is_null($this->getCode)) {$ch = curl_init('https://' . $slogin);$loginInfo = array('Authorization: Passport1.4 rgVerb=GET,OrgURL=http%3A%2F%2Fmessenger%2Emsn%2Ecom,sign-in=' . $this->userName . ',pwd=' . $this->passWord . ',' . $this->getCode,'Host: login.passport.com');curl_setopt($ch, CURLOPT_HTTPHEADER, $loginInfo);//print_r($loginInfo);//$this->getCode = null;curl_setopt($ch, CURLOPT_HEADER, 1);curl_setopt($ch, CURLOPT_NOBODY, 1);curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);$header = curl_exec($ch);//print_r($header);preg_match ('/from-PP='(.*?)'/', $header, $out);//print_r($out);if (isset($out[1])) {$this->loginAction($out[1]);} else {//return false;exit('无法捕捉到登陆代码的信息');}} else {return false;}}function loginAction($loginCode) // 登陆工作 {$this->put('USR {$this->trID} TWN S {$loginCode} rn'); // USR |trID| SSO S |t=code|$data = $this->get();//echo $data;//print_r($data);//$this->put('SYN {$this->trID} 0 rn');//$this->put('CHG {$this->trID} NLN rn');//print_r($this->get());}}?>