连接到nexus.passport.com时PHP超时

连接到nexus.passport.com时PHP超时,php,timeout,msn,Php,Timeout,Msn,我正在用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 />'

我正在用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
$socket=fsockopen(“messenger.hotmail.com”,1863年);
echo“已连接到第一台服务器。
”; //发送MSNP版本 fputs($socket,“版本0 MSNP10 CVR0\r\n”); echo fread(约合5000美元)。'
; //发送用户代理 fputs($socket,“CVR 1 0x0409 php”.phpversion().“i386 MSNMSGR 7.0.0000 msmssgs”。$\u POST[“username”]。“\r\n”); echo fread(约合5000美元)。'
; //发送用户名 FPUT($socket,“USR 2 TWN I”。$\u POST[“用户名”]。“\r\n”); //读取XFR $xfr=fread($socket,5000); echo$xfr。”
; $xfr=分解(“,$xfr”); //连接到第二台服务器 $server2=explode(“:”,$xfr[3]); $socket=fsockopen($server2[0],(int)$server2[1]); echo“已连接到第二台服务器。
”; //发送MSNP版本 fputs($socket,“版本0 MSNP10 CVR0\r\n”); echo fread(约合5000美元)。'
; //发送用户代理 fputs($socket,“CVR 1 0x0409 php”.phpversion().“i386 MSNMSGR 7.0.0000 msmssgs”。$\u POST[“username”]。“\r\n”); echo fread(约合5000美元)。'
; //发送用户名 FPUT($socket,“USR 2 TWN I”。$\u POST[“用户名”]。“\r\n”); //阅读USR $usr=fread($5000); 回声$usr。”
; $usr=爆炸(“,$usr”); //连接到Nexus $nexus=fsockopen(“nexus.passport.com”,443); $request\u nexus=“GET/rdr/pprdr.asp HTTP/1.1\r\n”; $request\u nexus.=“主机:nexus.passport.com\r\n”; $request\U nexus.=“用户代理:MSNphp/1.0(PHP;U;PHP 5;en-US)\r\n”; $request_nexus.=“接受:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n”; $request\u nexus.=“接受语言:en-us,en;q=0.5\r\n”; $request\u nexus.=“保持活动状态:300\r\n”; $request\u nexus.=“连接:保持活动\r\n”; $request\u nexus.=“缓存控制:最大年龄=0\r\n\r\n”; FPUT($nexus,$request\u nexus); echo-fread(nexus,5000美元)//这是导致错误的第54行
我的结果是:

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 已连接到第一台服务器。 版本0 MSNP10 CVR 1 1.0.0000 1.0.0000 1.0.0000http://msgr.dlservice.microsoft.com http://download.live.com/?sku=messenger XFR 2 NS 207.46.124.241:1863 0 65.54.239.21:1863 已连接到第二台服务器。 版本0 MSNP10 CVR 1 1.0.0000 1.0.0000 1.0.0000http://msgr.dlservice.microsoft.com http://download.live.com/?sku=messenger USR 2 TWN S ct=1249043921,服务器=5.5.4177.0,wp=FS_40秒_0_紧凑型,lc=1033,id=507,ru=http:%2F%2F Messenger.msn.com,tw=0,kpp=1,kv=4,ver=2.1.6000.1,rn=1LGBFIL,tpf=b0735e3a873dfb5e75054465196398e0 致命错误:第54行的C:\wamp\apps\msnphp\chat.php中超过了30秒的最大执行时间 连接到Nexus时出现超时错误。但是当我在Firefox中请求时,我得到了我想要的结果(通过HttpFox检查)。为什么Nexus要花这么多时间来响应我的脚本?在Firefox中需要2秒钟


有人知道我做错了什么吗?

你的脚本太长了。PHP有一种机制,如果脚本的运行时间超过设置中指定的时间,它会终止脚本。您可以在
php.ini
中更改此值(称为
max\u execution\u time
),也可以在脚本中使用函数对其进行更改。

当您连接到nexus.passport.com上的SSL端口(443)时,实际上,您并没有发送加密的信息:因此Nexus只是等待加密的数据到达,并最终超时(您的PHP脚本会提前超时)


您最好使用将信息发送到nexus,因为它能够为您处理SSL连接(为什么要重新发明轮子?)。

mmm。。。我知道这一点,但为什么nexus需要30秒以上才能响应我的PHP脚本,而Firefox需要2秒才能响应?您的服务器是否与Firefox运行在同一台计算机上?谢谢!我不知道SSL。我用ssl://nexus.passport.com 现在作为主持人!顺便提一下我真的不喜欢卷发。谢谢