0

PHP で MSN クライアントを作成しています。これはこれまでの私のコードです:

$socket = fsockopen("messenger.hotmail.com", 1863);
echo '<b>Connected to 1st server.</b><br />';
//Send MSNP version
fputs($socket, "VER 0 MSNP10 CVR0\r\n");
echo fread($socket, 5000) . '<br />';
//Send user-agent
fputs($socket, "CVR 1 0x0409 php ".phpversion()." i386 MSNMSGR 7.0.0000 MSMSGS ".$_POST["username"]."\r\n");
echo fread($socket, 5000) . '<br />';
//Send username
fputs($socket, "USR 2 TWN I ".$_POST["username"]."\r\n");
//Read XFR
$xfr = fread($socket, 5000);
echo $xfr . '<br />';
$xfr = explode(" ", $xfr);

//Connect to second server
$server2 = explode(":", $xfr[3]);
$socket = fsockopen($server2[0], (int)$server2[1]);
echo '<b>Connected to 2nd server.</b><br />';
//Send MSNP version
fputs($socket, "VER 0 MSNP10 CVR0\r\n");
echo fread($socket, 5000) . '<br />';
//Send user-agent
fputs($socket, "CVR 1 0x0409 php ".phpversion()." i386 MSNMSGR 7.0.0000 MSMSGS ".$_POST["username"]."\r\n");
echo fread($socket, 5000) . '<br />';
//Send username
fputs($socket, "USR 2 TWN I ".$_POST["username"]."\r\n");
//Read USR
$usr = fread($socket, 5000);
echo $usr . '<br />';
$usr = explode(" ", $usr);

//Connect to Nexus
$nexus = fsockopen("nexus.passport.com", 443);
$request_nexus = "GET /rdr/pprdr.asp HTTP/1.1\r\n";
$request_nexus .= "Host:nexus.passport.com\r\n";
$request_nexus .= "User-Agent:MSNphp/1.0 (PHP; U; PHP 5; en-US)\r\n";
$request_nexus .= "Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n";
$request_nexus .= "Accept-Language:en-us,en;q=0.5\r\n";
$request_nexus .= "Keep-Alive:300\r\n";
$request_nexus .= "Connection:keep-alive\r\n";
$request_nexus .= "Cache-Control:max-age=0\r\n\r\n";
fputs($nexus, $request_nexus);
echo fread($nexus, 5000);//This is line 54, which causes the error

私の結果はこれです:

1 台目のサーバーに接続しました。
VER0 MSNP10
CVR 1 1.0.0000 1.0.0000 1.0.0000 http://msgr.dlservice.microsoft.com http://download.live.com/?sku=messenger
XFR 2 NS 207.46.124.241:1863 0 65.54.239.21:1863
2 台目のサーバーに接続しました。
VER0 MSNP10
CVR 1 1.0.0000 1.0.0000 1.0.0000 http://msgr.dlservice.microsoft.com http://download.live.com/?sku=messenger
USR 2 TWN S ct=1249043921,rver=5.5.4177.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=b0735e3a873dfb5e75054465196398e0

致命的なエラー: 54 行目の C:\wamp\apps\msnphp\chat.php で最大実行時間が 30 秒を超えました

Nexus に接続するとタイムアウト エラーが発生します。しかし、Firefox でhttps://nexus.passport.com/rdr/pprdr.aspにリクエストすると、必要な結果が得られます (HttpFox で確認)。Nexus がスクリプトに応答するのに時間がかかるのはなぜですか? Firefox では 2 秒かかります。

私が間違っていることを誰かが知っていますか?

4

2 に答える 2

5

nexus.passport.com の SSL ポート (443) に接続している間は、実際には暗号化された情報を送信していません。したがって、Nexus は暗号化されたデータが到着するのを待っているだけで、最終的にタイムアウトします (PHP スクリプトがタイムアウトします)。事前に)。

おそらく、 Curlを使用して情報を nexus に送信するのが最適でしょう。これは、SSL 接続を処理できるためです (なぜ車輪を再発明する必要があるのでしょうか?)。

于 2009-07-31T12:57:49.013 に答える
2

スクリプトの実行時間が長すぎます。PHP には、スクリプトが設定で指定された時間よりも長く実行されると、スクリプトを強制終了するメカニズムがあります。この値 (と呼ばmax_execution_timeれます) を変更するか、 set_time_limit()関数をphp.ini使用してスクリプトで変更できます。

于 2009-07-31T12:52:52.743 に答える