Просмотр полной версии : Ввод капчи
programming
27.08.2009, 13:01
Появилась новая проблема.. Совсем недавно я спрашивал как можно вытащить капчу со страницы.. Вот эта тема - http://forum.antichat.ru/thread137573.html
Задача теперь состоит вот в чём:
1. пользователь заходит на сайт, в котором отображена только капча и поле ввода(то есть не на сайт с формой где реально располагается капча изначально)
2. пользователь вводит капчу и нажимает на кнопку после чего с помощью curl происходит заполнение формы.
НО! На следующей странице то уже будет другой url капчи..
В общем то именно это я и не знаю как обойти..
programming Не получится, значение капчи устанавливается в кукисы. Установить куки для чужого домена - не получится, не позволит политика безопасности браузера
З.Ы, людей украшает скромность - зачем срать на форуме создавая по 10 тем?
programming
27.08.2009, 13:16
programming Не получится, значение капчи устанавливается в кукисы. Установить куки для чужого домена - не получится, не позволит политика безопасности браузера
З.Ы, людей украшает скромность - зачем срать на форуме создавая по 10 тем?
Немного не понял.. По-моему Вы написали бред.. Или же напишите, что Вы подразумеваете под значением капчи..
А на счёт тем - не 10, а всего 2 и причём с совсем разными вопросами..
Как я понимаю надо чтобы грубо говоря перед регой или заполнением формы пользователь заполнял капчу?
а потом уже получит доступ на страницу с формой на которой будет капча именно от этой формы?
1. Заходим на сайт и получаем необходимые значения
Куки записываем: curl_setopt($ch, CURLOPT_COOKIEJAR, "./cook");
2. Выводим картинку капчи и вводим в поле её значение
3. Отправляем cURL'ом это значение + значения из п.1
Используем: curl_setopt($ch, CURLOPT_COOKIEFILE, "./cook");
4. Отправляем post запрос для заполнения формы на сайте, используем COOKIEFILE из п.3
programming
27.08.2009, 13:32
Как я понимаю надо чтобы грубо говоря перед регой или заполнением формы пользователь заполнял капчу?
а потом уже получит доступ на страницу с формой на которой будет капча именно от этой формы?
Немного не так..
Значит есть два сайта - первый с формой регистрации(вместе с капчей), а второй, на котором отображена только капча и поле ввода.
Нужно, чтобы пользователь заходил на второй сайт вводил капчу, а уже php с помощью curl отправлял запрос на первый сайт уже со своими данными, но значением капчи, которое ввёл пользователь.
programming
27.08.2009, 13:35
1. Заходим на сайт и получаем необходимые значения
Куки записываем: curl_setopt($ch, CURLOPT_COOKIEJAR, "./cook");
2. Выводим картинку капчи и вводим в поле её значение
3. Отправляем cURL'ом это значение + значения из п.1
Используем: curl_setopt($ch, CURLOPT_COOKIEFILE, "./cook");
4. Отправляем post запрос для заполнения формы на сайте, используем COOKIEFILE из п.3
Так в том то и дело, что не каких куков нет. Куки появляются только после того, как мы уже нажали на первом сайте на кнопку регистрация..
Быть может я чего-то не понимаю..
Быть может я чего-то не понимаю..
Да это я повидимому что-то не понимаю )
Если сайта два, то и капчи две и какое они имеют отношение друг к другу ?
Покажите ссылки
programming
27.08.2009, 13:39
Ну или же если более конкретно поставить задачу теперь -нужно, чтобы пользователь вводил капчу на странице и на этой же странице после его ввода должен отправляться пост запрос. Вот какэто реализовать?
Сайт один на котором капча, а второй где распологается мой скрипт. А скрипт вытягивает капчу с первого сайта, поэтому капчи должны быть одинаковыми..
Ну или же если более конкретно поставить задачу теперь -нужно, чтобы пользователь вводил капчу на странице и на этой же странице после его ввода должен отправляться пост запрос. Вот какэто реализовать?
..
1. Заходим на сайт и получаем необходимые значения
Куки записываем: curl_setopt($ch, CURLOPT_COOKIEJAR, "./cook");
2. Выводим картинку капчи и вводим в поле её значение
3. Отправляем cURL'ом это значение + значения из п.1
Используем: curl_setopt($ch, CURLOPT_COOKIEFILE, "./cook");
4. Отправляем post запрос для заполнения формы на сайте, используем COOKIEFILE из п.3
programming
27.08.2009, 13:45
..
Не понимаю как можно второй третий и четвёртый пункт сделать на одной странице..
if($_POST['captcha'])
{
# Отправляем все данные (включая код капчи) на сервер) (см.п.3)
}
else
{
# cURL'ом получаем необходимые значения (см.п.1)
# Выводим форму для ввода капчи (в hidden передаём необходимые значения) (см.п.2)
echo '<img src="captcha.jpg"><br>
<form name="captcha_form" action="index.php" method="POST">
<input type="text" name="captcha" value="" /><br>
<input type="hidden" name="HIDDEN-1" value="'.$HIDDEN-1.'" />
<input type="hidden" name="HIDDEN-2" value="'.$HIDDEN-2.'" />
<input type="submit" value="ok">
</form>';
}
programming
27.08.2009, 15:09
Нет.. Всё равно не получается.. В п.3 то уже другая сессия получается..
В общем не знаю уже, что делать.. Буду тогда конкретно спрашивать.
Итак, задача:
Есть сервис http://moemesto.ru. Нужно сделать скрипт, который вытаскивает капчу со страницы регистрации - http://moemesto.ru/register/?from=button. Создаёт форму где есть поле ввода и сама картинка капчи. Пользователь вводит код с картинки и нажимает на кнопку. В самом скрипте вшиты данные о регистрации - то есть логин, пароль и пр. С ними и происходит регистрация. В конце, после нажатия пользователем кнопки у него открывается страница, что всё успешно прошло.
Уже бьюсь с этим 3-й день - никакого эффекта.. Если хотите - могу дать мой код. Может ошибки найдёте..
<?php
@set_time_limit(0);
//-----------------//
$accounts = 'accounts.txt'; // Файл для сохранения аккаунтов
$divider = ':'; // Раздеитель
$login = ''; // Login
$password = ''; // Password
$email = ''; // E-mail
//-----------------//
function post($url,$post,$refer)
{
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.4) Gecko/2008102920 AdCentriaIM/1.7 Firefox/3.0.4");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
curl_setopt($ch, CURLOPT_REFERER, $refer);
curl_setopt($ch, CURLOPT_COOKIEJAR, "./cook1");
curl_setopt($ch, CURLOPT_COOKIEFILE, "./cook1");
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($ch);
return $result;
}
if($_POST['captcha'])
{
$result = post('http://moemesto.ru/register/','from=button&captchaid='.$_POST['captchaid'].'&login='.$login.'&email='.$email.'&password='.$password.'&captcha='.trim($_POST['captcha']).'&do_reg=%D0%97%D0%B0%D1%80%D0%B5%D0%B3%D0%B8%D1%81% D1%82%D1%80%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D1%82%D1 %8C%D1%81%D1%8F','Referer: http://moemesto.ru/register/?from=button');
$result = iconv("UTF-8","Windows-1251",$result);
if(preg_match('#2>П(.*?)з#i',$result,$end))
{
$fh = fopen($accounts, "a+");
$success - fwrite($fh, $login.$divider.password."\r\n");
fclose($fh);
Header('Location: index.php');
}
else
{
echo '<script>alert(\'Не правильный код!\')</script>';
echo '<meta http-equiv="Refresh" content="0; url=index.php">';
}
}
else
{
$result = post('http://moemesto.ru/register/',null,'http://moemesto.ru/');
preg_match('#id" value="(.*?)"#i',$result,$captchaid);
echo '<img src="http://moemesto.ru/captcha/'.$captchaid[1].'"><br>
<form name="captcha_form" action="index.php" method="POST">
<input type="text" name="captcha" value="" /><br>
<input type="hidden" name="captchaid" value="'.$captchaid[1].'" />
<input type="submit" value="ok">
</form>';
}
/* geforse.name */
?>
programming
27.08.2009, 16:29
Огромное спасибо. Всё заработало! А мой код не работал как обычно по моей же не внимательности..
programming
28.08.2009, 15:08
Опять появились трудности с этим скриптом..
Решил сделать ввод данных из формы:
<form action="/index.php" method="get">
Логин:<input type="text" name="login"><br>
Пароль:<input type = "text" name="password"><br>
E-mail:<input type ="text" name = "email"> <br>
<input type ="submit" value="Регистрация">
</form>
Но скрипт не видит эти переменные и считает, что их нет. Из начала скрипта я конечно убрал логин, пароль и e-mail.
В чём может быть причина?
<form action="/index.php" method="POST">
В скрипте (index.php) вызывай так:
$login = $_POST['login'];
programming
28.08.2009, 15:54
Да пробовал я уже так.. Вообще в скрипте почему-то нет таких переменных когда даже я методом гет передавал и в адр. строке они были прописаны.. Вообще парадокс..
<?php
@set_time_limit(0);
//-----------------//
$accounts = 'accounts.txt'; // Файл для сохранения аккаунтов
$divider = ':'; // Раздеитель
//-----------------//
function post($url,$post,$refer)
{
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.4) Gecko/2008102920 AdCentriaIM/1.7 Firefox/3.0.4");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
curl_setopt($ch, CURLOPT_REFERER, $refer);
curl_setopt($ch, CURLOPT_COOKIEJAR, "./cook1");
curl_setopt($ch, CURLOPT_COOKIEFILE, "./cook1");
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($ch);
return $result;
}
if($_POST['captcha'])
{
$result = post('http://moemesto.ru/register/','from=button&captchaid='.$_POST['captchaid'].'&login='.$_POST['login'].'&email='.$_POST['email'].'&password='.$_POST['password'].'&captcha='.trim($_POST['captcha']).'&do_reg=%D0%97%D0%B0%D1%80%D0%B5%D0%B3%D0%B8%D1%81% D1%82%D1%80%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D1%82%D1 %8C%D1%81%D1%8F','http://moemesto.ru/register/?from=button');
$result = iconv("UTF-8","Windows-1251",$result);
if(preg_match('#2>П(.*?)з#i',$result,$end))
{
$fh = fopen($accounts, "a+");
$success - fwrite($fh, trim($_POST['login']).$divider.trim($_POST['password'])."\r\n");
fclose($fh);
Header('Location: index.php');
}
else
{
echo '<script>alert(\'Не правильный код!\')</script>';
echo '<meta http-equiv="Refresh" content="0; url=index.php">';
}
}
else
{
$result = post('http://moemesto.ru/register/',null,'http://moemesto.ru/');
preg_match('#id" value="(.*?)"#i',$result,$captchaid);
echo '
<form name="captcha_form" action="index.php" method="POST">
Код: <input type="text" name="captcha" value="" /> <img src="http://moemesto.ru/captcha/'.$captchaid[1].'"><br><p>
<input type="hidden" name="captchaid" value="'.$captchaid[1].'" />
Логин: <input type="text" name="login"><br><p>
Пароль: <input type = "text" name="password"><br><p>
E-mail: <input type ="text" name = "email"><br><p>
<input type ="submit" value="Регистрация">
</form>';
}
/* geforse.name */
?>
programming
28.08.2009, 16:32
:D Не ну так то понятно.. Хотелось бы всё таки с другой страницы передавать значения..
<form action="./index.php" method="POST">
так что скажет?
programming
28.08.2009, 16:49
Да ничего не скажет.. Это же тоже самое получается..
index.html
<form action="reger.php" method="post">
Логин: <input type="text" name="login"><br>
Пароль: <input type = "text" name="password"><br>
E-mail: <input type ="text" name = "email"><br>
<input type ="submit" value="Регистрация">
</form>
reger.php
<?php
@set_time_limit(0);
//-----------------//
$accounts = 'accounts.txt'; // Файл для сохранения аккаунтов
$divider = ':'; // Раздеитель
//-----------------//
function post($url,$post,$refer)
{
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.4) Gecko/2008102920 AdCentriaIM/1.7 Firefox/3.0.4");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
curl_setopt($ch, CURLOPT_REFERER, $refer);
curl_setopt($ch, CURLOPT_COOKIEJAR, "./cook1");
curl_setopt($ch, CURLOPT_COOKIEFILE, "./cook1");
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($ch);
return $result;
}
if($_POST['captcha'])
{
$result = post('http://moemesto.ru/register/','from=button&captchaid='.$_POST['captchaid'].'&login='.$_POST['login'].'&email='.$_POST['email'].'&password='.$_POST['password'].'&captcha='.trim($_POST['captcha']).'&do_reg=%D0%97%D0%B0%D1%80%D0%B5%D0%B3%D0%B8%D1%81% D1%82%D1%80%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D1%82%D1 %8C%D1%81%D1%8F','http://moemesto.ru/register/?from=button');
$result = iconv("UTF-8","Windows-1251",$result);
if(preg_match('#2>П(.*?)з#i',$result,$end))
{
$fh = fopen($accounts, "a+");
$success - fwrite($fh, $_POST['login'].$divider.$_POST['password']."\r\n");
fclose($fh);
Header('Location: reger.php');
}
else
{
echo '<script>alert(\'Не правильный код!\')</script>';
echo '<meta http-equiv="Refresh" content="0; url=reger.php">';
}
}
else
{
$result = post('http://moemesto.ru/register/',null,'http://moemesto.ru/');
preg_match('#id" value="(.*?)"#i',$result,$captchaid);
echo '<img src="http://moemesto.ru/captcha/'.$captchaid[1].'"><br>
<form name="captcha_form" action="reger.php" method="POST">
<input type="text" name="captcha" value="" /><br>
<input type="hidden" name="captchaid" value="'.$captchaid[1].'" />
<input type="hidden" name="login" value="'.$_POST['login'].'" />
<input type="hidden" name="password" value="'.$_POST['password'].'" />
<input type="hidden" name="email" value="'.$_POST['email'].'" />
<input type="submit" value="ok">
</form>';
}
/* geforse.name */
?>
programming
28.08.2009, 17:01
Заработало)) Видимо нужно $_POST сразу ставить везде, а не присваивать его значение другой переменной..
Спасибо.
Не могу поставить Вам плюсик, т.к. прошлый плюс был также Вам))
Нехачу показать глупым,но почему выше в примерах вы делали так
$_POST['bla']=$login;
Ведь это наоборот,вы сбиваете значение $_POST['bla'], и присваиваете ему значение $login.
Шоке.
Шоке.
Перепутал немножко :)
Видимо нужно $_POST сразу ставить везде, а не присваивать его значение другой переменной..
Бред )
Я ставлю всегда сразу $_POST,т.к...нравится мне так и всё :)
Это особый вид коденга.
Буду брать пример у вас, вы ведь никогда не ошибаетесь
programming
28.08.2009, 17:39
Я ставил $login = $_POST['bla']..
Вот кому надо
http://depositfiles.com/files/ori4yly5a
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot