
17.06.2009, 19:38
|
|
Постоянный
Регистрация: 25.03.2008
Сообщений: 670
С нами:
9541766
Репутация:
2407
|
|
Вроде бы есть класс для работы с mrim на php, у меня нет сейчас времени смотреть, как конкретно отсылаются пакеты. Возможно, легче реализовать получение контакт-листа не через веб-агент (описание протокола есть тут: http://agent.mail.ru/ru/developers/protocol.html).
|
|
|

17.06.2009, 19:54
|
|
Познавший АНТИЧАТ
Регистрация: 27.04.2007
Сообщений: 1,044
С нами:
10021597
Репутация:
905
|
|
Например, можно тут (http://gibs0n.name/mainpage/view/article/Описание+протокола+Mail.Ru+аге нта) почитать
|
|
|

17.06.2009, 19:55
|
|
Постоянный
Регистрация: 25.03.2008
Сообщений: 670
С нами:
9541766
Репутация:
2407
|
|
Все-таки сделал
PHP код:
<?php
$login='мыло';
$pass='пасс';
$pr='';$pp=''; //адрес прокси и порт, если надо
$res=socket_do('win.mail.ru','/cgi-bin/loginagent','','GET','','',0,$pr,$pp);
preg_match_all('/Set-Cookie: (.+);/iUs',$res,$cook);
foreach($cook[1] as $ck)
{
$cookies[]=$ck;
}
$tmpcookie=implode('; ',array_unique($cookies));
$res=socket_do('koi.mail.ru','/cgi-bin/auth',"page=http%3A%2F%2Fwmrim.mail.ru%2Fwin%2Fcontactlist.html&FailPage=http%3A%2F%2Fwin.mail.ru%2Fcgi-bin%2Floginagent&post=&login_from=&Login=$login&Domain=$domain&Password=$pass&level=1&x=11&y=12",'POST',$tmpcookie,'http://win.mail.ru/cgi-bin/loginagent',0,$pr,$pp);
preg_match_all('/Set-Cookie: (.+);/iUs',$res,$cook);
foreach($cook[1] as $ck)
{
$cookies[]=$ck;
}
$cookies=implode('; ',array_unique($cookies));
preg_match("/Location: http:\/\/koi\.mail\.ru\/cgi\-bin\/checkcookie\?(.+)\r\n/iUs",$res,$m);
if(!isset($m[1]))
die("Ошибка при входе.");
$res=socket_do('koi.mail.ru','/cgi-bin/checkcookie?'.$m[1],'','GET',$cookies,'http://win.mail.ru/cgi-bin/loginagent',0,$pr,$pp);
preg_match("/Location: (.+)\r\n/iUs",$res,$m);
if(!isset($m[1]))
die("Ошибка при входе.");
$tmp=explode('/',$m[1],4);
$res=socket_do('wmrim.mail.ru','/'.$tmp[3],'','GET',$cookies,'http://win.mail.ru/cgi-bin/loginagent',0,$pr,$pp);
$sock=@socket_create(AF_INET,SOCK_STREAM,SOL_TCP);
if(!$sock)
die("Ошибка при создании сокета.");
if($pr)
{
@socket_connect($sock,$pr,$pp) or die("Ошибка при работе с сокетами.");
$request = "POST http://wmrim.mail.ru/connect HTTP/1.0\r\n";
}
else
{
$mip=@gethostbyname('wmrim.mail.ru');
@socket_connect($sock,$mip,"80") or die("Ошибка при работе с сокетами.");
$request = "POST /connect HTTP/1.0\r\n";
}
@socket_set_nonblock($sock) or die("Ошибка при работе с сокетами.");
if(@socket_select($r = null, $w = array($sock), $f = null, 5)!=1)
die("Ошибка при работе с сокетами.");
$request.= "Host: wmrim.mail.ru\r\n";
$request.= "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1) Gecko/20061010 Firefox/2.0\r\n";
$request.= "Referer: {$m[1]}\r\n";
$request.= "Content-Type: application/xml\r\n";
$request.= "Content-Length: ".strlen('status=1')."\r\n";
$request.= "Connection: keep-alive\r\n";
$request.= "Keep-alive: 300\r\n";
$request.= "Cookie: $cookies\r\n";
$request.= "\r\n";
@socket_write($sock,$request.'status=1') or die("Ошибка при работе с сокетами.");
if(@socket_select($r = array($sock), $w = null, $f = null, 5)!=1)
die("Ошибка при работе с сокетами.");
$ret=@socket_read($sock,1000) or die("Ошибка при работе с сокетами.");
if(strpos($ret,"MRIM_CS_LOGIN_REJ, {reason:\"Invalid session\"}")!==false)
{
@socket_close($sock);
die("Ошибка авторизации в mail-агенте.");
}
if(@socket_select($r = array($sock), $w = null, $f = null, 5)!=1)
die("Ошибка при работе с сокетами.");
$ret=@socket_read($sock,100000) or die("Ошибка при работе с сокетами.");
print htmlspecialchars($ret); //вот отсюда брать контакт-лист
@socket_close($sock);
usleep($wt*1000);
function socket_do($page,$suri,$data,$method,$cook,$ref,$close=0,$pr='',$pp=0)
{
if($pr)
{
$request="$method http://$page$suri HTTP/1.0\r\n";
$fp=fsockopen("tcp://".$pr,$pp,$errno,$errstr,30);
}
else
{
$request = "$method $suri HTTP/1.0\r\n";
$fp=fsockopen('tcp://'.$page,80,$errorNumber,$errorString,30);
}
if(!$fp) die("Ошибка при работе с сокетами.");
@stream_set_timeout($fp,30);
$request.= "Host: $page\r\n";
$request.= "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1) Gecko/20061010 Firefox/2.0\r\n";
if($ref) $request.= "Referer: $ref\r\n";
if($method=='POST')
{
$request.= "Content-Type: application/x-www-form-urlencoded\r\n";
$request.= "Content-Length: ".strlen($data)."\r\n";
}
$request.= "Connection: close\r\n";
if($cook)
$request.="Cookie: $cook\r\n";
$request.="\r\n";
$request.=$data;
fputs($fp,$request);
$res="";
while(!feof($fp))
{
$res.=fgets($fp,128);
if($close) break;
}
fclose($fp);
return $res;
}
?>
Из того, что в конце получает скрипт, несложно получить и контакт-лист.
PS. На денвере работать не будет.
|
|
|

17.06.2009, 22:50
|
|
Постоянный
Регистрация: 31.01.2008
Сообщений: 643
С нами:
9619229
Репутация:
445
|
|
У меня слишком много результатов вывода из Mysql
Я хотел бы их по страницам разбить (выводы)
Как это сделать?
|
|
|

17.06.2009, 22:55
|
|
Он хакер.
Регистрация: 01.11.2008
Сообщений: 1,756
С нами:
9223466
Репутация:
3171
|
|
http://alt-f4.ru/php-mysql-output-by-page
|
|
|

17.06.2009, 23:50
|
|
Постоянный
Регистрация: 20.12.2007
Сообщений: 334
С нами:
9680718
Репутация:
118
|
|
PHP код:
<?php
$min = 0;
$max = 25;
for ($i = 1; $i < 12; $i++)
{
for($j = $min; $j < $max; $j++)
{
$e .= "num: ".$j."\n";
}
$min += $max;
$max += $max;
}
echo $e."\n";
?>
В чем трабла, цыкл доходит до 99, и начинается с 175, в идеале должен дойти 299, прибавляя за итерацию 25.
|
|
|

17.06.2009, 23:58
|
|
Он хакер.
Регистрация: 01.11.2008
Сообщений: 1,756
С нами:
9223466
Репутация:
3171
|
|
Сообщение от shellz[21h]
PHP код:
<?php
$min = 0;
$max = 25;
for ($i = 1; $i < 12; $i++)
{
for($j = $min; $j < $max; $j++)
{
$e .= "num: ".$j."\n";
}
$min += $max;
$max += $max;
}
echo $e."\n";
?>
В чем трабла, цыкл доходит до 99, и начинается с 175, в идеале должен дойти 299, прибавляя за итерацию 25.
Попахивает говнокоденгомь=(
|
|
|

18.06.2009, 00:10
|
|
Постоянный
Регистрация: 20.12.2007
Сообщений: 334
С нами:
9680718
Репутация:
118
|
|
тем не менее, а проблема не решина.
|
|
|

18.06.2009, 00:14
|
|
Постоянный
Регистрация: 25.03.2008
Сообщений: 670
С нами:
9541766
Репутация:
2407
|
|
должен дойти 299, прибавляя за итерацию 25.
PHP код:
for($i=0;$i<=299;$i+=25)
print $i.'<br>';
|
|
|

18.06.2009, 01:01
|
|
Постоянный
Регистрация: 20.12.2007
Сообщений: 334
С нами:
9680718
Репутация:
118
|
|
Сообщение от d_x
PHP код:
for($i=0;$i<=299;$i+=25)
print $i.'<br>';
Возможно я не правильно вырозился, мне нужно чтоб за интерацию первого цыкла, второй цыкл проганял 25 интераций и так 12 раз. должно получится 1-299 по 25 за интерацию первого цыкла.
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|