wolgast
Профессор
- Регистрация
- 8 Дек 2006
- Сообщения
- 297
- Реакции
- 35
- Автор темы
- #1
Давай подумаем зачем оно нам нужно?! Капчами сейчас защищают практически все формы заполняемые случайными посетителями. Их используют при регистрации на форумах, регистрации ящиков.. да вообще везде. А теперь представь, что ты достал большую базу каталогов ссылок на каком-то определенном движке и там для размещения ссылки нужно вводить капчу!
Если бы капчи не было, то все было бы очень просто, спамь и все. А что делать если капча есть? Да на самом деле все так же просто, только нужно еще научиться использовать сервис anti-captcha.com! Поехали...
Для начала нужно зарегистрироваться на сайте anti-captcha.com. Стоимость одной капчи - $0.001- ИМХО - цена очень приятная ($1 за 1000 загрузок)
Инвайты для регистрации можно
После регистрации нужно пополнить счет и посмотреть свой ключ (дальше $key) в настройках. Для экспериментов сделал вот такую вот простую формочку:
Форма-имитатор регистрации с капчей. Вводим любое имя и значение с капчи. Если капчу ввели правильно, то получаем сообщение:
В противном случае:
Для начала нужно провести анализ полей формы. У нас есть следующие поля:
Все это нужно посылать методом POST. Картинку нам отдает скрипт img.php
Еще следует помнить, что значение капчи привязано к сессии, а значит после первого подключения нам нужно будет сохранить идентификатор сессии.
Алгоритм:
1. Сливаем капчу (
2. Отправляем капчу на разгадывание. Получаем значение
3. Имея значение капчи и идентификатор сессии заканчиваем регистрацию
Вот так вот, все просто. Начнем.
Основная функция в скрипте - geturl(). С ее помощью будем сливать и постить.
Принимает URL к которому подключиться, массив $postdata с данными для POST и параметр $header. Если последний равен единице, то выводим только заголовки страницы
Для начала нужно получить идентификатор сессии. Для этого получаем заголовки
Ответ
Из этого всего вытаскиваем ID сессии (edd8be2ff7a1577cc048734b43607415)
Теперь, имея идентификатор, можно слить капчу и отправляем ее на anti-captcha.com Рассказывать о том, какие параметры принимает этот сервис и зачем, я не буду, документации на их сайте хватает.
О этом куске кратко. Сначала используя ID сессии сливаем капчу и постим ее в антикапчу. Из ответа антикапчи получаем ID операции, по которому потом будет проверять ее статус. Поскольку эти капчи вводят люди и для распознания им нужно время, то я сделал перед проверкой значения, паузу в 15 секунд! Правильнее было бы проверять статус каждые 5 сек. в цикле, но усложнять этот пример я не буду, сами допишете.
В итоге, если все прошло без ошибок, мы получим значение введенной капчи. Остается только запостить форму!
Я получил в ответ:
Пример может подвиснуть если антикапча перегружена, а по ответам антикапчи можно определить когда заканчиваются средства на счете или когда просто нет свободных слотов. Все это найдете на страницы документации сервиса.
Вот и все. При перепечатывании очень прошу указывать сайт -
Если бы капчи не было, то все было бы очень просто, спамь и все. А что делать если капча есть? Да на самом деле все так же просто, только нужно еще научиться использовать сервис anti-captcha.com! Поехали...
Для начала нужно зарегистрироваться на сайте anti-captcha.com. Стоимость одной капчи - $0.001- ИМХО - цена очень приятная ($1 за 1000 загрузок)
Инвайты для регистрации можно
Для просмотра скрытого содержимого вы должны войти или зарегистрироваться.
После регистрации нужно пополнить счет и посмотреть свой ключ (дальше $key) в настройках. Для экспериментов сделал вот такую вот простую формочку:
Для просмотра скрытого содержимого вы должны войти или зарегистрироваться.
Форма-имитатор регистрации с капчей. Вводим любое имя и значение с капчи. Если капчу ввели правильно, то получаем сообщение:
Привет кодер
тест пройден
В противном случае:
Вернись и введи правильный код!
Для начала нужно провести анализ полей формы. У нас есть следующие поля:
user - имя пользователя
captcha - значение капчи
act=reg - скрытое поле
Все это нужно посылать методом POST. Картинку нам отдает скрипт img.php
Еще следует помнить, что значение капчи привязано к сессии, а значит после первого подключения нам нужно будет сохранить идентификатор сессии.
Алгоритм:
1. Сливаем капчу (
Для просмотра скрытого содержимого вы должны войти или зарегистрироваться.
) и сохраняем идентификатор сессии2. Отправляем капчу на разгадывание. Получаем значение
3. Имея значение капчи и идентификатор сессии заканчиваем регистрацию
Вот так вот, все просто. Начнем.
Основная функция в скрипте - geturl(). С ее помощью будем сливать и постить.
Принимает URL к которому подключиться, массив $postdata с данными для POST и параметр $header. Если последний равен единице, то выводим только заголовки страницы
PHP:
<?php
function geturl($url,$postdata=0,$header=0)
{
$poststr="";
if ($postdata)
while (list($name,$value)=each($postdata)){
if (strlen($poststr)>0)
$poststr.="&";
$poststr.=$name."=".urlencode($value);
}
// инициализация сеанса
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
if ($header){
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_NOBODY, 1);
}else{
curl_setopt($ch, CURLOPT_HEADER, 0);
}
if ($postdata){
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $poststr);
}
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$res = curl_exec($ch);
curl_close($ch);
return $res;
}
?>
Для начала нужно получить идентификатор сессии. Для этого получаем заголовки
PHP:
$header = geturl('http://myseoincome.ru/php/anticaptcha/',0,1);
Ответ
HTTP/1.1 200 OK
Date: Sat, 13 Dec 2008 09:16:20 GMT
Server: Apache/1.3.34 (Debian)
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Pragma: no-cache
X-Powered-By: PHP/5.2.0-8+etch13
Set-Cookie: PHPSESSID=edd8be2ff7a1577cc048734b43607415; path=/
Connection: close
Content-Type: text/html
Из этого всего вытаскиваем ID сессии (edd8be2ff7a1577cc048734b43607415)
PHP:
preg_match('|PHPSESSID=(.*);|U', $header, $out);
$session = $out[1];
Теперь, имея идентификатор, можно слить капчу и отправляем ее на anti-captcha.com Рассказывать о том, какие параметры принимает этот сервис и зачем, я не буду, документации на их сайте хватает.
PHP:
$postdata = array(
'PHPSESSID' => $session
);
$captcha = geturl('http://myseoincome.ru/php/anticaptcha/img.php',$postdata);
$postdata = array(
'method' => 'base64',
'key' => $key,
'body' => base64_encode($captcha),
'ext' => 'png'
);
$rev = geturl("http://anti-captcha.com/in.php",$postdata);
if (substr($rev,0,2)=='OK'){
//получаем id капчи в системе
$anti_captcha_id = substr($rev,3);
}else{
echo "Upload ERROR";
exit;
}
//ждем 15 сек и проверяем капчу
sleep(15);
$postdata = array(
'key' => $key,
'action' => 'get',
'id' => $anti_captcha_id
);
$cap = geturl("http://anti-captcha.com/res.php",$postdata);
if (substr($cap,0,2)=='OK'){
$captcha_value = substr($cap,3);
}else{
echo "ERROR";
exit;
}
О этом куске кратко. Сначала используя ID сессии сливаем капчу и постим ее в антикапчу. Из ответа антикапчи получаем ID операции, по которому потом будет проверять ее статус. Поскольку эти капчи вводят люди и для распознания им нужно время, то я сделал перед проверкой значения, паузу в 15 секунд! Правильнее было бы проверять статус каждые 5 сек. в цикле, но усложнять этот пример я не буду, сами допишете.
В итоге, если все прошло без ошибок, мы получим значение введенной капчи. Остается только запостить форму!
PHP:
$postdata = array(
"user" => "SEO-шник",
"captcha" => $captcha_value,
"act" => "reg",
"PHPSESSID" => $session
);
$recdata = geturl('http://myseoincome.ru/php/anticaptcha/',$postdata);
echo $recdata;
Я получил в ответ:
Привет SEO-шник тест пройден
Пример может подвиснуть если антикапча перегружена, а по ответам антикапчи можно определить когда заканчиваются средства на счете или когда просто нет свободных слотов. Все это найдете на страницы документации сервиса.
Вот и все. При перепечатывании очень прошу указывать сайт -
Для просмотра скрытого содержимого вы должны войти или зарегистрироваться.
Удачи!