|
|
|
| Пытаюсь авторизоваться с помощью сокетов на сайте.
Форма вот такая
<form name='auth' action="" method='post' onsubmit='return sendform();' >
<br>
Логин: <input type=text value='' name='loger' id="login">
Пароль: <input type=password value='' id="pass" name='paser' ><input type=submit name=form_login value='вход'>
<br>
<a href='/registr'>Регистрация</a>
</form>
|
Если логин и пароль верны записываются COOKIE с 4 параметрами : логин,md5(пароль),хост,ip, затем в базе сравниваются..
Как правильно авторизоваться, помогите плиз.
<?php
$hostname = "www.сайт.ru";
$path = "/index1.php";
$line = "";
$fp = fsockopen($hostname, 80, $errno, $errstr, 30);
if (!$fp) echo "$errstr ($errno)<br />\n";
else
{
$loger='admin';
$paser='admin';
$data = "loger=$loger&paser=$paser;
$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\r\n";
fwrite($fp, $headers.$data);
while (!feof($fp))
{
$line .= fgets($fp, 1024);
}
fclose($fp);
}
echo $line;
?>
|
| |
|
|
|
|
|
|
|
для: fiper
(15.01.2008 в 15:27)
| | А где Ваши попытки? Это же явно не Ваш скрипт. | |
|
|
|
|
|
|
|
для: Unkind
(15.01.2008 в 15:38)
| | это не мой скрипт...взял на этом форуме | |
|
|
|
|
|
|
|
для: fiper
(15.01.2008 в 15:27)
| |
<?
$hostname = "www.сайт.ru";
$path = "/index1.php";
$data = "loger=admin&paser=admin&form_login=".urlencode("вход");
$req = "POST ".$path." HTTP/1.0\r\n"
."Host: ".$hostname."\r\n"
."Content-Type: application/x-www-form-urlencoded\r\n"
."Content-Length: ".strlen($data)."\r\n\r\n"
.$data;
$fp = fsockopen($hostname, 80);
fwrite($fp, $req);
$answ = "";
while ( !feof($fp) )
$answ .= fread($fp, 1024);
print $answ;
|
| |
|
|
|
|
|
|
|
для: Саня
(15.01.2008 в 15:40)
| | Спасибо за скрипт. разобрался наконец немножко с сокетами.
Указываю логин и пароль, вижу что заголовки отправляются нормально, но cookie не создаются . Если указать неправильный пароль соответсвенно получаю сообщение от своего скрипта "Неправильно указан логин или пароль"
Почему не создаются cookie? Я так понимаю, потому что заголовки уже отправлены? Но тогда была бы ошибка. | |
|
|
|
|
|
|
|
для: fiper
(15.01.2008 в 20:44)
| | setcookie() | |
|
|
|
|
|
|
|
для: fiper
(15.01.2008 в 20:44)
| | > Почему не создаются cookie?
Раз уж Вы решили сами формировать запрос, то должны понять, что разбирать ответ сервера Вы должны теперь сами. Наверное, Ваш сервер посылал заголовок вроде Set-Cookie: .... Его и нужно разбирать. | |
|
|
|
|
|
|
|
для: Unkind
(15.01.2008 в 23:59)
| | Авторизация прошла успешно.. сервер вернул set-cookie с логином ,паролем и сидом
теперь появилась следующая проблема.
После авторизации появляется форма , нужно её заполнить и отправить методом пост, предполагаю, что нужно вытащить заголовки из предыдущего соединения примерно вот так
preg_match("#Set-Cookie: PHPSESSID=(.*);#i",$answ,$sid);
preg_match("#Set-Cookie: loger=(.*);#i",$answ,$out_login);
preg_match("#Set-Cookie: paser=(.*);#i",$answ,$out_pass);
|
и отправить ещё раз с помощью сокетов?Или есть возможность отправить всё с первого раза?
И ещё вопрос, как узнать какие заголовки отправляются на другом сервере при отправке данных? | |
|
|
|
|
|
|
|
для: fiper
(16.01.2008 в 03:18)
| | Кто-нибудь поможет? | |
|
|
|
|
|
|
|
для: fiper
(16.01.2008 в 12:44)
| | Нужно пердать 2 параметра сразу GET и post
if($_GET['mod']=='forum' and isset($_POST['who']))
|
Возможно это сделать или нет? | |
|
|
|
|
|
|
|
для: fiper
(16.01.2008 в 20:41)
| | Возможно:
<?
$post = "переменные POST";
$get = "переменные GET";
$req = "POST /tndex.php?".$get." HTTP/1.0\r\n"
."Host: host\r\n"
."Content-Type: application/x-www-form-urlencoded\r\n"
."Content-Length: ".strlen($post)."\r\n\r\n"
.$post
|
| |
|
|
|
|
|
|
|
для: Саня
(16.01.2008 в 21:01)
| | Уважаемые программисты, нужна ваша помощь.
Осваиваю HTTP. Решил написать автосабмиттер для тренировки.Не могу понять в чем дело. Скрипт должен авторизовываться на сайте методом пост.
Взял за образец сайт loadit.ru , (думаю ни кого не обижу).
Форма для входа такая:
<form method="post">
<input name="login_name" type="text">
<input name="login_password" type="password">
<input name="login" type="hidden" id="login" value="submit"><
</form>
|
Скрипт написал такой:
set_time_limit(0);
//Логин и пароль 666666
$fp = fsockopen("loadit.ru", 80, $errno, $errstr, 30);
if (!$fp)
{
echo "$errstr ($errno)<br />\n";
exit();
}
$post_data = "login_name=666666&login_password=666666&login=submit";
$out = "POST / HTTP/1.1\r\n";
$out .= "Host: loadit.ru\r\n";
$out .= "Connection: Close\r\n\r\n";
$out .= "Accept: text/html;\r\n";
$out .= "Referer: http://loadit.ru\r\n";
$out .= "Connection: Close\r\n";
$out .= "Content-Length: ".strlen($post_data)."\r\n";
$out .= "Content-type: application/x-www-form-urlencoded\r\n\r\n";
$out .= $post_data;
fwrite($fp, $out);
$result = '';
while (!feof($fp))
{
$result .= fgets($fp, 128);
}
fclose($fp);
// зарегились
$fp = fsockopen("loadit.ru.", 80, $errno, $errstr, 30);
if (!$fp)
{
echo "$errstr ($errno)<br />\n";
exit();
}
preg_match_all('/Set-Cookie: ([^;]+)/',$result,$cook,PREG_PATTERN_ORDER);
echo "<pre>";
print_r($cook);
echo "</pre><br />";
$out = "GET / HTTP/1.0\r\n";
$out.= "Cookie: ".implode("; ",$cook[1])."\r\n\r\n";
fwrite($fp, $out);
while (!feof($fp))
{
echo "<pre>";
echo fgets($fp, 128);
echo "</pre>";
}
fclose($fp);
|
Сервер прислал такие заголовки:
Array
(
[0] => Array
(
[0] => Set-Cookie: PHPSESSID=ac75f6d75f4a7c9110deba355d5d2b4a
)
[1] => Array
(
[0] => PHPSESSID=ac75f6d75f4a7c9110deba355d5d2b4a
)
)
HTTP/1.1 200 OK
Date: Sun, 13 Jan 2008 00:34:27 GMT
Server: Apache/2
Last-Modified: Wed, 24 Oct 2007 22:56:55 GMT
ETag: "2060403-2c-8b59bc0"
Accept-Ranges: bytes
Content-Length: 44
Vary: Accept-Encoding,User-Agent
Connection: close
Content-Type: text/html
Apache is functioning normally
|
Авторизоваться не получается. Несколько дней провел за чтением мануалов, но не нашел ответа на свою проблему.
Как получить тело самой страницы, которая после этого отображается?
Пробовал потом смотреть readfile этой же страницы, но там авторизации нет. Вот и не знаю, что мне с этим делать?
Однозначно нужен ваш совет специалиста.
С уважением Вячеслав. | |
|
|
|
|
|
|
|
для: Adamant
(17.01.2008 в 02:16)
| | loadit.ru. с точкой - это как?
Зачем Вы используете разные версии протокола?
Поле Host: во втором запросе куда-то делось.
Зато полей Connection - в первом - целых два.
А чтобы не писать одно и то же по нескольку раз, люди используют функции. | |
|
|
|