MSN (HOTMAIL) メール フレンド同期の更新バージョン 2011-8 を入手します
昨年、MSN (HOTMAIL)、gmail、yahoo の 3 つの模擬ログインを作成しました。
現在、MSN の有効期限が切れています。これはインターネットでも必要なため、もう一度 HTTP 分析ツールを入手して詳しく調べてみました
今回の分析では、MSN がログイン時に COOKIE を検出したことがわかりました。最後のステップでは、COOKIE を検出するのが正常です。
今回は、過剰な COOKIES が検出された場合、彼は必要な Cookie をフィルタリングすることしかできません。最後のステップの要件
わかりました、コードは次のとおりです (基本的には前回と同じですが、途中に追加の COOKIE フィルターがある点が異なります)
私のブログ: www.onlypo.com
<!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ --> <?php define( "COOKIEJAR", tempnam( ini_get( "upload_tmp_dir" ), "cookie" ) ); // COOKIES を保存するパスを定義します。操作権限が必要です。 define( "TIMEOUT", 1000 ); //タイムアウト設定 エラー報告(E_ALL); クラスMSN { 関数 getAddressList($username, $password) { //ステップ 1: ログイン ページのデータの取得をシミュレートし、Cookie を書き留めます $cookies = 配列(); $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.1.6206.0&wp=MBI&wreply=http:%2F %2Fmail.live.com%2Fdefault.aspx&lc=2052&id=64855&mkt=zh-cn&cbcxt=mail&snsc=1"); curl_setopt($ch, CURLOPT_COOKIEJAR, COOKIEJAR); curl_setopt($ch, CURLOPT_TIMEOUT, TIMEOUT); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $str =curl_exec($ch); カール_クローズ($ch); //データ ファイルは JS によって生成された Cookie をシミュレートします $CkTst = 'G'.time() * 1000; $wlidperf = "スループット=3&latency=948&FR=L&ST=".(time() * 1000 + 1254); $fp = fopen(COOKIEJAR, "a+"); $str_new = "login.live.comtTRUEt/tFALSEt0tCkTstt$CkTstrn"; $str_new .= "login.live.comtTRUEt/tFALSEt0twlidperft$wlidperfrn"; fwrite($fp,$str_new); fclose($fp); //パラメータの分析 $matches = 配列(); preg_match('/<inputs*type="hidden"s*name="PPFT"s*id="(.*?)"s*value="(.*?)"s*/>/i' 、$str、$matches); $PPFT = $matches[2]; $タイプ = 11; $LoginOptions = 3; $Newuser = 1; $idsbho = 1; $i2 = 1; $i12 = 1; $i3 = '562390'; $i14 = '868'; $i15 = '1338'; $PPSX = 'パ'; //パラメータをマージします $postfiles = "login=".$username."&passwd=".$password."&type=".$type."&LoginOptions=".$LoginOptions."&Newuser=".$Newuser."&idsbho=".$idsbho ."&i2=".$i2."&i3=".$i3."&PPFT=".$PPFT."&PPSX=".$PPSX."&i12=1&i14=$i14&i15=$i15"; //ステップ 2: ログインを開始する $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.1.6206.0&wp= MBI&wreply=http:%2F%2Fmail.live.com%2Fdefault.aspx&lc=2052&id=64855&mkt=zh-cn&cbcxt=mail&snsc=1&bk='.(time()+715)); //ここでの 2 つの 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); カール_クローズ($ch); if(stripos($content,'WLWorkflow') !== FALSE ) { //WLWorkflow ログイン ページ JS return false; //ログインに失敗しました。 } // 位置情報のリンクを取得 $matches = 配列(); preg_match('/window.location.replace("(.*?)")/i', $content, $matches); $url_continiune_1 = $matches[1] //次のリンク if(!$url_continiune_1) { false を返します。 } // 冗長な Cookie を削除します $arr_new = ファイル(COOKIEJAR); $str_new = ''; $need_arr = 配列(0,1,2,3,7,9,13,15,16,17,18,21,22); foreach($arr_new as $k => $v) { if(in_array($k, $need_arr)) $str_new .= "$v"; }$fp = fopen(COOKIEJAR, "w+"); fwrite($fp,$str_new); fclose($fp); // 第三步: 入引导页面 $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); // $postfiles をエコーします。 カール_クローズ($ch); //获取redicturl链接 $matches = 配列(); preg_match('/<as>/i', $content_2, $matches); $url_contiune_2 = $matches[1]; //次に来る接続 if(!$url_contiune_2) { false を返します。 } //获取邮箱请要求基址读取host $matches = 配列(); preg_match('/(.*?)//(.*?)/(.*?)/i', $url_contiune_2, $matches); $url_contiune_3 = トリム($matches[1]).'//'.trim($matches[2]); //首页定义的站点基址 $url_4 = $url_contiune_3.'/mail/ContactMainLight.aspx?n=435707983'; //nの後の数字は随数です if(!$url_contiune_3) { false を返します。 } //第四步: 开始获取邮箱联系人 //ベース $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); カール_クローズ($ch); // データを分析します (このデータは Hotmail の JS 処理機構のため、表面では表示されませんが、ソース コードではデータを確認できます) return $this->hanlde_date($str); } 関数 hanlde_date($data) { $new_str = 配列(); if(!empty($data)) { $ops_start =tripos($data,'ic_control_data'); $ops_end = ストリップス($data,';',$ops_start); $new_str = substr($data, $ops_start + strlen('ic_control_data = '), $ops_end - $ops_start - strlen('ic_control_data = ') ); $new_str を返します。 //JSON オブジェクトを返す } それ以外 { 戻り配列(); } } } $msn = 新しい MSN(); $res = $msn->getAddressList('usrname@hotmail.com','111111'); ?> <div class="clear"></div></as>