2009-07-31 12 views
0

Ich schreibe einen MSN-Client in PHP. Dies ist mein Code für bisher:PHP Timeout beim Verbinden mit nexus.passport.com

$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 

Mein Ergebnis ist dieses:

 
Connected to 1st server. 
VER 0 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 
Connected to 2nd server. 
VER 0 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 

Fatal error: Maximum execution time of 30 seconds exceeded in C:\wamp\apps\msnphp\chat.php on line 54 

ich einen Timeout-Fehler, wenn ich zu Nexus anschließen. Aber wenn ich eine Anfrage an https://nexus.passport.com/rdr/pprdr.asp in Firefox mache, bekomme ich das Ergebnis, das ich will (überprüft mit HttpFox). Warum braucht Nexus so viel, um auf mein Skript zu reagieren? In Firefox dauert es 2 Sekunden.

Weiß jemand, was ich falsch mache?

Antwort

5

Während Sie sich mit dem SSL-Port (443) auf nexus.passport.com verbinden, senden Sie die Informationen nicht verschlüsselt. Daher wartet Nexus nur darauf, dass die verschlüsselten Daten ankommen und schließlich das Timing (Ihr PHP Skript ist Zeit vor der Hand).

Sie werden wahrscheinlich am besten verwenden Curl, um die Informationen an Nexus zu senden, da es in der Lage ist, die SSL-Verbindung für Sie zu behandeln (warum erfinden Sie das Rad neu?).

+0

Danke! Ich wusste nichts über SSL. Ich benutze jetzt ssl: //nexus.passport.com als Host! Übrigens, ich mag CURL nicht wirklich. Vielen Dank! –

2

Ihr Skript läuft zu lang. PHP hat einen Mechanismus, bei dem es ein Skript beendet, wenn es länger läuft als in den Einstellungen angegeben. Sie können diesen Wert (max_execution_time) in Ihrem php.ini ändern oder Sie können set_time_limit() Funktion verwenden, um es in Ihrem Skript zu ändern.

+0

mmm ... Ich weiß das, aber warum braucht Nexus mehr als 30 Sekunden, um auf mein PHP-Skript zu reagieren, aber 2 Sekunden, um auf Firefox zu reagieren? –

+0

Läuft Ihr Server auf demselben Computer wie Ihr Firefox? – RaYell

+0

Ja, es ist ....... –