|
|
|
| Помогите
Вот конечный заголовок, хотя на STEP 3
Выдаётся вот такой заголовок
HTTP/1.1 302 Found
Date: Mon, 26 May 2008 11:59:56 GMT
Server: Apache/2.2.8 (Unix) mod_ssl/2.2.8 OpenSSL/0.9.8b mod_mono/1.2.6 mod_auth_passthrough/2.1 mod_bwlimited/1.4 FrontPage/5.0.2.2635 PHP/5.2.5
X-Powered-By: PHP/5.2.5
Location: http://win.mail.ru/cgi-bin/start?back=1
Connection: close
Content-Encoding: gzip
Vary: Accept-Encoding
Content-Length: 323
Content-Type: text/html; charset=windows-1251
А при переходе получаю вот что, не понимаю почему...
HTTP/1.1 302 OK
Date: Mon, 26 May 2008 14:21:43 GMT
Server: Apache/1.3.27 (Unix) mru_xml/0.471 gorgona/2.1 mod_jk/1.2.4 mod_ruby/1.0.7 Ruby/1.6.8 mod_mrim/0.17
Connection: close
Content-Type: text/html
Content-Length: 45
Location: http://win.mail.ru/cgi-bin/login
Cache-Control: no-cache,no-store,must-revalidate
Pragma: no-cache
Expires: Sun, 27 May 2007 14:21:43 GMT
Last-Modified: Mon, 26 May 2008 18:21:43 GMT
Очень буду благодарен за вашу помощь...
[поправлено модератором: объемные листинги лучше прикреплять в виде архива] | |
|
|
|
|
|
|
|
для: master-quest
(26.05.2008 в 19:16)
| | Как мне кажется, Вы не задали вопроса. | |
|
|
|
|
|
|
|
для: master-quest
(26.05.2008 в 19:16)
| | А, что там ребята не "защищаются" от этого? | |
|
|
|
|
|
|
|
для: Незнайка
(26.05.2008 в 19:34)
| | >А, что там ребята не "защищаются" от этого?
От чего? )) От этого нет защиты)))
Защита это сесси и кукисы, а они подделываются)
Вопрос)) Не пойму где у меня ошибки.
В конце концов просто помогите пройти авторизацию на mail.ru
Кому проше вот аськи 1-9восемь3-669 355-ноль16-572 | |
|
|
|
|
|
|
|
для: master-quest
(26.05.2008 в 19:53)
| | > Не пойму где у меня ошибки
Довольно трудно читать Ваш первый пост. Код не обрамлен в теги [code] ... [/cоde].
Вызывает некоторое недоумение хотя бы это:
> preg_match("|<HTML>(.*)</HTML>|i",$line,$link);
> $explode=explode("=", $link[1]) ;
> // STEP 3
> $line="";
> $hostname = "win.mail.ru";
> $path = "/cgi-bin/checkcookie?id=$explode[1]";
Вы получаете то, что между тегами <html> и </html>. Вы уверены в том, что $explode[1] будет каким-то идентификатором?
Потом:
> $path = "/cgi-bin/start?back=1";
Откуда уверенность, что это нужная Вам страница? Вы берете фиксированное значение, а желательно доставать адрес из заголовка Location. | |
|
|
|
|
|
|
|
для: BinLaden
(26.05.2008 в 20:04)
| |
<?php
// STEP 1
$hostname = "win.mail.ru";
$path = "/cgi-bin/login";
$fp = fsockopen($hostname, 80, $errno, $errstr, 30);
if (!$fp) echo "Ошибка соединения, code error $errstr ($errno)<br />\n";
else
{
$headers = "GET $path HTTP/1.1\r\n";
$headers .= "Host: $hostname\r\n";
$headers .= "Connection: keep-alive\r\n\r\n";
fwrite($fp, $headers);
// Получаем ответ
while (!feof($fp))
{
$line .= fgets($fp, 1024);
preg_match("|Set-Cookie: mrcu=([\d\w]*.+)|i",$line,$out);
if(!empty($out[1]))
{
break;
}
}
fclose($fp);
}
// STEP 2
$line="";
$path = "/cgi-bin/auth";
$fp = fsockopen($hostname, 80, $errno, $errstr, 30);
if (!$fp) echo "Ошибка соединения, code error $errstr ($errno)<br />\n";
else
{
$data = "page=&post=&login_from=&Login=ЛОГИН&Domain=mail.ru&Password=ПАРОЛЬ&\r\n\r\n";
$headers = "POST $path HTTP/1.1\r\n";
$headers .= "Host: $hostname\r\n";
$headers .= "Content-type: application/x-www-form-urlencoded\r\n";
$headers .= "Content-Length: ".strlen($data)."\r\n";
// Подделываем cookie
$headers .= "Cookie: mrcu=$out[1];\r\n";
$headers .= "Connection: Close\r\n\r\n";
fwrite($fp, $headers.$data);
// Получаем ответ
while (!feof($fp))
{
$line .= fgets($fp, 1024);
}
fclose($fp);
}
preg_match("|Set-Cookie: t=([\d\w]*.+)|i",$line,$out1);
preg_match("|Set-Cookie: Mpop=([\d\w]*.+)|i",$line,$out2);
$n=preg_match("|Location: (.*)\n|i",$line,$link);
if ($n==0) {echo "Ошибка STEP 3"; exit();}
$explode=explode(".ru", $link[1]) ;
echo "\n STEP 2 \nПолучил $line \n Отправил \n $headers \n\n\n\n\n\n ";
// STEP 3
$line="";
$hostname = "win.mail.ru";
$path = "$explode[1]";
$fp = fsockopen($hostname, 80, $errno, $errstr, 30);
if (!$fp) echo "Ошибка соединения, code error $errstr ($errno)<br />\n";
else
{
$headers = "GET $path HTTP/1.1\r\n";
$headers .= "Host: $hostname\r\n";
$headers .= "Content-type: application/x-www-form-urlencoded\r\n";
// Подделываем cookie
$headers .= "Cookie: mrcu=$out[1]; Mpop=$out2[1]; t=$out1[1]\r\n";
$headers .= "Connection: keep-alive\r\n\r\n";
fwrite($fp, $headers);
// Получаем ответ
while (!feof($fp))
{
$line .= fgets($fp, 1024);
}
fclose($fp);
}
$n=preg_match("|Location: (.*)\n|i",$line,$link);
if ($n==0) {echo "Ошибка STEP 4"; echo "\nПолучил $line \n Отправил \n $headers \n "; exit();}
$explode=explode(".ru", $link[1]) ;
$line="";
// STEP 4
$hostname = "win.mail.ru";
$path = "$explode[1]";
$fp = fsockopen($hostname, 80, $errno, $errstr, 30);
if (!$fp) echo "Ошибка соединения, code error $errstr ($errno)<br />\n";
else
{
$headers = "GET $path HTTP/1.1\r\n";
$headers .= "Host: $hostname\r\n";
$headers .= "Content-type: application/x-www-form-urlencoded\r\n";
$headers .= "Accept: text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1\r\n";
$headers .= "Accept-Language: ru-RU,ru;q=0.9,en;q=0.8\r\n";
$headers .= "Accept-Charset: iso-8859-1, utf-8, utf-16, *;q=0.1\r\n";
// Подделываем cookie
$headers .= "Cookie: mrcu=$out[1]; Mpop=$out2[1]; t=$out1[1]\r\n";
$headers .= "Connection: keep-alive\r\n\r\n";
fwrite($fp, $headers);
// Получаем ответ
while (!feof($fp))
{
$line .= fgets($fp, 1024);
}
fclose($fp);
}
echo "$line \n\n\n\n\n\n\n\n\n\n\n\n\n\\n\n $headers";
?>
|
Вот так получается, но всёравно криво, но у меня ещё такой вопрос. После отправли логина пасса, получаю
Set-Cookie: t=AAABAAAAAAAAAAAAAAYFxgcA; expires=Sat, 22 Nov 2008 17:07:44 GMT; path=/; domain=.mail.ru
Set-Cookie: Mpop=1211821664:06587e5e004f545419c54421c4642524645 155a58585c184a47:user@mail.ru:; expires=Sun, 24 Aug 2008 17:07:44 GMT; path=/; domain=.mail.ru, т.е. нужно "установить" два кукиса, как их отправлять ,верно ли я это сделал?
$headers .= "Cookie: mrcu=$out[1]; Mpop=$out2[1]; t=$out1[1]\r\n";
Вот эта строка. | |
|
|
|
|
|
|
|
для: master-quest
(26.05.2008 в 19:53)
| | >> ...От этого нет защиты
Может это просто авторизация сделана с ошибками?
Или нет? | |
|
|
|
|
|
|
|
для: master-quest
(26.05.2008 в 19:16)
| | Через cURL imho проще
<?
$url = "http://win.mail.ru/cgi-bin/auth";
$post = "Login=YOU_NAME&Domain=YOU_DOMAIN&Password=YOU_PASSWD";
$cookie = str_replace('\\', '/', dirname(__FILE__)) . 'cookie.txt';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_FAILONERROR, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_TIMEOUT, 3);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie);
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie);
curl_setopt($ch, CURLOPT_NOBODY, 0);
curl_setopt($ch, CURLOPT_HEADER, 0);
$result = curl_exec($ch);
curl_close($ch);
echo $result;
?>
|
| |
|
|
|
|
|
|
|
для: mihdan
(27.05.2008 в 12:25)
| | Warning: curl_setopt() [function.curl-setopt]: CURLOPT_FOLLOWLOCATION cannot be activated when in safe_mode or an open_basedir is set in /home/блабла/public_html/gm/curl.php on line 8
Это что заначит?
Может всётаки подскажите как на соксах делать? | |
|
|
|
|
|
|
|
для: master-quest
(27.05.2008 в 19:53)
| | Довольно интересная ошибка. Связана, очевидно, с schema "file:" и open_basedir.
Но в Вашем случае это даже лишняя опция. | |
|
|
|
|
|
|
|
для: BinLaden
(27.05.2008 в 22:35)
| | BinLaden прав эта опция не нужна, так как сервер никуда не перенаправляет и все отлично работает без этого
<?
$url = "http://win.mail.ru/cgi-bin/auth";
$post = "Login=YOU_NAME&Domain=YOU_DOMAIN&Password=YOU_PASSWD";
$cookie = str_replace('\\', '/', dirname(__FILE__)) . 'cookie.txt';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_FAILONERROR, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_TIMEOUT, 3);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie);
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie);
curl_setopt($ch, CURLOPT_NOBODY, 0);
curl_setopt($ch, CURLOPT_HEADER, 0);
$result = curl_exec($ch);
curl_close($ch);
echo $result;
?>
|
| |
|
|
|
|
|
|
|
для: mihdan
(28.05.2008 в 10:50)
| | > BinLaden прав эта опция не нужна, так как сервер никуда не перенаправляет и все отлично работает без этого
Там есть перенаправление, но есть проверка cookies, которые устанавливаются на странице "http://win.mail.ru/cgi-bin/auth" после отправки и CURLOPT_FOLLOWLOCATION будет только мешать. | |
|
|
|
|
|
|
|
для: BinLaden
(28.05.2008 в 11:44)
| | проверил без CURLOPT_FOLLOWLOCATION - не работает.
вот рабочий пример | |
|
|
|
|
|
|
|
для: mihdan
(28.05.2008 в 16:05)
| | > проверил без CURLOPT_FOLLOWLOCATION - не работает
Конечно, потому что Вы должны сами обработать получаемые заголовки и, соответсвенно, нужно сменить значение CURLOPT_HEADER. | |
|
|
|
|
|
|
|
для: BinLaden
(28.05.2008 в 23:05)
| | Зачем, когда cURL сам это делает ))))) | |
|
|
|
|
|
|
|
для: mihdan
(01.06.2008 в 01:20)
| | > mihdan (01.06.2008 в 01:20)
> Зачем, когда cURL сам это делает )))))
То есть Вы хотите сказать при CURLOPT_FOLLOWLOCATION cURL сохраняет сам Cookies и передаёт их серверу? На чём основано Ваше предположение? Практика говорит об обратном - cURL не будет этого делать.
Чтобы быть голословным, приведу пример:
<?php
$test_cookie = isset($_GET['test_cookie']) ? $_GET['test_cookie'] : '';
if( $test_cookie == 1 )
{
setcookie('_test_cookie', 'value');
header('Location: http://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'] . '?test_cookie=2');
exit;
}
else if( $test_cookie == 2 )
{
if( isset($_COOKIE['_test_cookie']) )
{
echo 'I have already received cookie "_test_cookie"!';
}
else
{
echo 'Where is "_test_cookie"? :(';
}
exit;
}
$ch = curl_init( 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'] . '?test_cookie=1' );
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_exec($ch);
curl_close($ch);
?>
|
Результат кода: Where is "_test_cookie"? :(
Неужели у Вас что-то другое? | |
|
|
|
|
|
|
|
для: BinLaden
(01.06.2008 в 01:58)
| | CURLOPT_FOLLOWLOCATION - автопереход по редиректам (302), а куки:
<?
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie);
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie);
?>
|
[поправлено модератором] | |
|
|
|
|
|
|
|
для: mihdan
(01.06.2008 в 11:44)
| | > BinLaden (28.05.2008 в 11:44)
> Там есть перенаправление, но есть проверка cookies, которые устанавливаются на странице "http://win.mail.ru/cgi-bin/auth" после отправки и CURLOPT_FOLLOWLOCATION будет только мешать
То есть после отправки данных методом POST там устанавливаются cookies и перенаправляются на страницу checkcookies. Благодаря CURLOPT_FOLLOWLOCATION, конечно, перенаправление на checkcookies произойдет, но вот cookies отправлены не будут.
Вы же этим сообщением:
> mihdan (01.06.2008 в 01:20)
> Зачем, когда cURL сам это делает )))))
заявляете, что при cURL сам будет сохранять и передавать cookies при CURLOPT_FOLLOWLOCATION.
Пожалуйста, внимательней читайте сообщения пользователей и не делайте поспешные заявления.
Уже неоднократно наблюдаю, как Вы пытаетесь выкрутиться из-за собственной ошибки. :(
[поправлено модератором] | |
|
|
|
|
|
|
|
для: BinLaden
(01.06.2008 в 15:33)
| | Я сказал CURLOPT_FOLLOWLOCATION - автопереход по редиректам (302) | |
|
|
|
|
|
|
|
для: BinLaden
(01.06.2008 в 15:33)
| | >Вы же этим сообщением:
>> mihdan (01.06.2008 в 01:20)
>> Зачем, когда cURL сам это делает )))))
>заявляете, что при cURL сам будет сохранять и передавать cookies при
>CURLOPT_FOLLOWLOCATION.
Не при CURLOPT_FOLLOWLOCATION, а при
<?
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie);
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie);
?>
|
| |
|
|
|
|
|
|
|
для: mihdan
(02.06.2008 в 10:39)
| | > Не при CURLOPT_FOLLOWLOCATION, а при
Речь шла конкретно про то, почему автоматическая переадресация тут не нужна.
[поправлено модератором] | |
|
|
|
|
|
|
|
для: BinLaden
(02.06.2008 в 12:11)
| | вот оно работает - куки сами получаются отправляются, сработывает переадресация только с помощью cURL
[поправлено модератором] | |
|
|
|
|
|
|
|
для: mihdan
(28.05.2008 в 16:05)
| | PHP исходник можно увидеть, я скрипт запускал на хостинге Slavhost http://gm.master-qwest.com/mail.php и получил ошибку(она выше...). На мой взгляд лучше делать на сокетах т.к. они доступны почти всегда, а cURL не всегда. Подскажите с заголовками, именно с заголовками вся проблема, в том как отпрвить и чтоб это было правильно. Да на курлах (проще) синтаксиса больше. Но личше на сокетах. | |
|
|
|
|
|
|
|
для: master-quest
(30.05.2008 в 20:51)
| | > На мой взгляд лучше делать на сокетах т.к. они доступны почти всегда, а cURL не всегда
Вы привели слабый аргумент. Лично я не знаю платных хостингов без CURL.
> HTTP/1.1
По моему скромному мнению тут желательно писать HTTP/1.0, так как в HTTP/1.1 для подобного скрипта могут быть подводные камни.
> получил ошибку(она выше...)
Код mihdan'а явно не направлен на решение Вашей задачи. Возможно, он просто что-то хотел показать.
> Вот так получается, но всёравно криво
> Подскажите с заголовками, именно с заголовками вся проблема, в том как отпрвить и чтоб это было правильно
Что именно не так? | |
|
|
|
|
|
|
|
для: BinLaden
(30.05.2008 в 21:56)
| | http://gm.master-qwest.com/mail777.php
Вот все общение которое происходит с mail.ru
1) Возмозно что то не то с Connection: Keep-Alive там может надо Connection: Close
2) Нужно ли посылать User-Agent
3) Нужен ли там Referer
---------------------------------------
В конце концов в общем какие по вашему мнению заголовки нужны а какие нет.
Да и почему по вашему мнению mail.ru посылает меня снова на http://win.mail.ru/cgi-bin/login
просто после авторизации через браузер конечный URL http://win.mail.ru/cgi-bin/start?back=1 и судя по ответам сервера mail.ru скрипт прошол авторизацию. | |
|
|
|
|
|
|
|
для: master-quest
(30.05.2008 в 22:13)
| | Все люди всем спасибо за помощь ! (Хотя я так и не понел что вы мне помогли !!!! ПО МОЙМУ НИ ЧЕГО ДЕЛЬНОГО КРОМЕ "НУ МОЖЕТ ТАК А ВОБЩЕ НАВЕРНО ТЫ ПОПРОБУЙ КАКНИТЬ ТАК И Т.Д.")
Но в канце концов я прошол авторизацию !!!!!!!
Кароче кодеры там просто кукис быал грязный !!!
Да и проще писать на сокетах. | |
|
|
|
|
|
|
|
для: Master-Quest
(30.05.2008 в 22:51)
| | Категорически не согласен :( Что значит кукис "грязный"? И на сокетах не проще, а на много сложнее, уж слишком много нужно кода написать и много чего учесть, что выполнить такую примитивную операцию, как авторизация.
ЗЫ: смените хостера | |
|
|
|
|
|
|
|
для: master-quest
(30.05.2008 в 20:51)
| | см. выше | |
|
|
|
|
|
|
|
для: master-quest
(27.05.2008 в 19:53)
| | Вы с хостинга это пытаетесь сделать, или с локальной машины? | |
|
|
|
|
|
|
|
для: AcidTrash
(27.05.2008 в 23:07)
| | о чём вообще здесь речь шла?) | |
|
|
|
|