hudeyong926 发表于 2013-2-7 00:13:25

MSN好友列表类2

<?php/******************************************************************** * FileName: class.msn.php            * by changwei, 2010-8-20            * Contact MSN:changwei0112@hotmail.com      * 获取MSN好友Email列表            * ===================================================================== ** PHP配置环境要求            * 支持socket、ssl、curl,开启php.ini文件中的以下地方   * ;extension=php_sockets.dll            * ;extension=php_curl.dll            * ;extension=php_openssl.dll            *********************************************************************/error_reporting ( 7 );class msn {private $startcomm = 0;private $username = '';private $password = '';private $commend = '';private $domain = '';private $socket = '';private $challenge = '';private $status = array ();private $data = array ();function set_account($username, $password) {$this->username = $username;$this->password = $password;}function getData() {$buffer = "";while ( ! feof ( $this->socket ) ) {$buffer .= fread ( $this->socket, 1024 );if (preg_match ( "/\r/", $buffer )) {break;}}$this->checkData ( $buffer );}function getData2() {$buffer = "";while ( ! feof ( $this->socket ) ) {$buffer .= fread ( $this->socket, 1024 );if (preg_match ( "/\r\n\r\n/", $buffer )) {break;}}$this->checkData ( $buffer );}function checkData($buffer) {if (preg_match ( "/lc\=(.+?)/Ui", $buffer, $matches )) {$this->challenge = "lc=" . $matches ;}if (preg_match ( "/(XFR 3 NS )(+?) (.*) (+?)/is", $buffer, $matches )) {$split = explode ( ":", $matches );$this->startcomm = 1;$this->msn_connect ( $split , $split );}if (preg_match ( "/tpf\=(+?)/Ui", $buffer, $matches )) {$this->nexus_connect ( $matches );}$split = explode ( "\n", $buffer );for($i = 0; $i < count ( $split ); $i ++) {$detail = explode ( " ", $split [$i] );if ($detail == "LST") {if (isset ( $detail ))$this->data [] = array ($detail , urldecode ( $detail ) );}}$this->status = array (200, $this->data );//echo $buffer;}function msn_connect($server, $port) {if ($this->socket) {fclose ( $this->socket );}$this->socket = @fsockopen ( $server, $port, $errno, $errstr, 20 );if (! $this->socket) {$this->status = array (500, 'MSN验证服务器无法连接' );return false;} else {$this->startcomm ++;$this->send_command ( "VER " . $this->startcomm . " MSNP8 CVR0", 1 );$this->send_command ( "CVR " . $this->startcomm . " 0x0409 win 4.10 i386 MSNMSGR 6.2 MSMSGS " . $this->username, 1 );$this->send_command ( "USR " . $this->startcomm . " TWN I " . $this->username, 1 );}}function send_command($command) {$this->commend = $command;$this->startcomm ++;fwrite ( $this->socket, $command . "\r\n" );$this->getData ();}function nexus_connect($tpf) {$arr [] = "GET /rdr/pprdr.asp HTTP/1.0\r\n\r\n";$curl = curl_init ();curl_setopt ( $curl, CURLOPT_URL, "https://nexus.passport.com:443/rdr/pprdr.asp" );curl_setopt ( $curl, CURLOPT_RETURNTRANSFER, 1 );curl_setopt ( $curl, CURLOPT_VERBOSE, 0 );curl_setopt ( $curl, CURLOPT_HEADER, 1 );curl_setopt ( $curl, CURLOPT_HTTPHEADER, $arr );curl_setopt ( $curl, CURLOPT_SSL_VERIFYPEER, FALSE );$data = curl_exec ( $curl );curl_close ( $curl );preg_match ( "/DALogin=(.+?),/", $data, $matches );if (! isset ( $matches ))return false;$split = explode ( "/", $matches );$headers = "GET /$split HTTP/1.1\r\n";$headers = "Authorization: Passport1.4 OrgVerb=GET,OrgURL=http%3A%2F%2Fmessenger%2Emsn%2Ecom,sign-in=" . $this->username . ",pwd=" . $this->password . ", " . trim ( $this->challenge ) . "\r\n";$curl = curl_init ();curl_setopt ( $curl, CURLOPT_URL, "https://" . $split . ":443/" . $split );curl_setopt ( $curl, CURLOPT_RETURNTRANSFER, 1 );curl_setopt ( $curl, CURLOPT_VERBOSE, 0 );curl_setopt ( $curl, CURLOPT_FOLLOWLOCATION, 1 );curl_setopt ( $curl, CURLOPT_HTTPHEADER, $headers );curl_setopt ( $curl, CURLOPT_HEADER, 1 );curl_setopt ( $curl, CURLOPT_SSL_VERIFYPEER, FALSE );$data = curl_exec ( $curl );curl_close ( $curl );preg_match ( "/t=(.+?)'/", $data, $matches );if (! isset ( $matches )) {$this->status = array (404, '你输入的MSN帐号或者密码错误' );return false;}$this->send_command ( "USR " . $this->startcomm . " TWN S t=" . trim ( $matches ) . "", 2 );$this->send_command ( "CHG " . $this->startcomm . " HDN", 2 );$this->send_command ( "SYN " . $this->startcomm . " 0", 2 );$this->getData2 ();$this->send_command ( "SYN " . $this->startcomm . " 1 46 2", 2 );$this->getData2 ();$this->send_command ( "CHG " . $this->startcomm . " BSY" );$this->getData ();}public function getStatus() {return $this->status;}}$msn = new MSN ();$msn->set_account ( 'MSN账号名', 'MSN密码' );$msn->msn_connect ( "messenger.hotmail.com", 1863 );$data = $msn->getStatus ();print_r ( $data );?>
页: [1]
查看完整版本: MSN好友列表类2