recaptcha

_king

Постоялец
Регистрация
25 Июн 2008
Сообщения
120
Реакции
3
подскажите плиз, каким образом можно сохранить картинку recaptcha для распознания или как выдрать ссылку из жабаскрипта на эту каритнку
 
Парсишь со страницы с капчей значение между challenge?k= и кавычкой,
идешь по адресу где после k= идет спарсенное значение, далее парсишь значение challenge : и по адресу
,где после c= последнее спарсенное значние, получаешь картинку
 
подскажите плиз, каким образом можно сохранить картинку recaptcha для распознания или как выдрать ссылку из жабаскрипта на эту каритнку

Нахрена дергать с жабоскрипта? Грузи айфрейм, в нем все что тебе нужно.
Хотя ты мог-бы для приличия отключить в своем браузере яваскрипт и посмотреть что произойдет. Уверен - глупых вопросов тогда-б не задавал.
 
Нахрена дергать с жабоскрипта? Грузи айфрейм, в нем все что тебе нужно.
Хотя ты мог-бы для приличия отключить в своем браузере яваскрипт и посмотреть что произойдет. Уверен - глупых вопросов тогда-б не задавал.
Сам то пробовал отключать js? Рекапча работает, но некоторые сайты не принимают такие данные. Тем более что это намного геморойнее.
вот
PHP:
function preg($i){
 global $result;
 preg_match ('|'.$i.'|is' , $result, $r);
 return $r[1];
}
 $result = ch('https://www.livejournal.com/create.bml');
 $sid = preg('name="lj_form_auth" value="(.*?)"');
 $url_js = preg('src="(https://api-secure.recaptcha.net.*?)"'); // файл js где хранится ИД картиники
 $result = ch($url_js.' https://www.livejournal.com/create.bml');
 

 $url_pic = preg("challenge : '(.*?)'");
 $picture = ch("http://api.recaptcha.net/image?c=".$url_pic);
 
 $fp_p=fopen("recapcha.png",'w');
 fwrite($fp_p,$picture);
 fclose($fp_p);

 echo '<img src="recapcha.png">';
Где ch() - это функция curl или сокет, которая коннектится к урлу, отправляет куки и возвращает содержимое
 
сделал через ифрейм. там из геморра только отправить пост на апи.рекаптча.
объем кода тотже. на lj работает
 
Сам то пробовал отключать js? Рекапча работает, но некоторые сайты не принимают такие данные. Тем более что это намного геморойнее.
вот
PHP:
function preg($i){
 global $result;
 preg_match ('|'.$i.'|is' , $result, $r);
 return $r[1];
}
 $result = ch('https://www.livejournal.com/create.bml');
 $sid = preg('name="lj_form_auth" value="(.*?)"');
 $url_js = preg('src="(https://api-secure.recaptcha.net.*?)"'); // файл js где хранится ИД картиники
 $result = ch($url_js.' https://www.livejournal.com/create.bml');
 $url_pic = preg("challenge : '(.*?)'");
 $picture = ch("http://api.recaptcha.net/image?c=".$url_pic);
 $fp_p=fopen("recapcha.png",'w');
 fwrite($fp_p,$picture);
 fclose($fp_p);
 echo '<img src="recapcha.png">';
Где ch() - это функция curl или сокет, которая коннектится к урлу, отправляет куки и возвращает содержимое
Написал вот так
PHP:
<?php
function preg($i){
 global $result;
 preg_match ('|'.$i.'|is' , $result, $r);
 return $r[1];
}
function ch($site_url) {
$ch_s = curl_init();
curl_setopt($ch_s, CURLOPT_URL, $site_url);
curl_setopt($ch_s, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch_s, CURLOPT_RETURNTRANSFER, 1);
$data = curl_exec($ch_s);
curl_close($ch_s);
return $data;
}
 $result = ch('https://www.livejournal.com/create.bml');
 $sid = preg('name="lj_form_auth" value="(.*?)"');
 $url_js = preg('src="(https://api-secure.recaptcha.net.*?)"'); // файл js где хранится ИД картиники
 $result = ch($url_js.' https://www.livejournal.com/create.bml');
 echo $url_js;
 $url_pic = preg("challenge : '(.*?)'");
 echo $url_pic;
 $picture = ch("http://api.recaptcha.net/image?c=".$url_pic);
 $fp_p=fopen("recapcha.png",'w');
 fwrite($fp_p,$picture);
 fclose($fp_p);
 echo '<img src="recapcha.png">';
?>
Почему то не заработало. Вот этот код точно рабочий $url_pic = preg("challenge : '(.*?)'");
У меня echo $url_pic пустоту возвращает.
 
Написал вот так
PHP:
<?php
function preg($i){
 global $result;
 preg_match ('|'.$i.'|is' , $result, $r);
 return $r[1];
}
function ch($site_url) {
$ch_s = curl_init();
curl_setopt($ch_s, CURLOPT_URL, $site_url);
curl_setopt($ch_s, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch_s, CURLOPT_RETURNTRANSFER, 1);
$data = curl_exec($ch_s);
curl_close($ch_s);
return $data;
}
 $result = ch('https://www.livejournal.com/create.bml');
 $sid = preg('name="lj_form_auth" value="(.*?)"');
 $url_js = preg('src="(https://api-secure.recaptcha.net.*?)"'); // файл js где хранится ИД картиники
 $result = ch($url_js.' https://www.livejournal.com/create.bml');
 echo $url_js;
 $url_pic = preg("challenge : '(.*?)'");
 echo $url_pic;
 $picture = ch("http://api.recaptcha.net/image?c=".$url_pic);
 $fp_p=fopen("recapcha.png",'w');
 fwrite($fp_p,$picture);
 fclose($fp_p);
 echo '<img src="recapcha.png">';
?>
Почему то не заработало. Вот этот код точно рабочий $url_pic = preg("challenge : '(.*?)'");
У меня echo $url_pic пустоту возвращает.
да:ah:, у меня была немного модфицированная-компактная функция курла, строчку
PHP:
 $result = ch($url_js.' https://www.livejournal.com/create.bml');
на
PHP:
 $result = ch($url_js);
 
Вот что в конце концов получилось. Правда так и не завилось почему то. Может кто ткнёт на ошибку? ЖЖ мне показывает в ответ страницу где сказано что все поля не заполнены.

PHP:
<?php

function ch($site_url,$can_get_headers) {
	$ch_s = curl_init();
	if ($can_get_headers == 1) {

		curl_setopt($ch_s, CURLOPT_COOKIESESSION, TRUE); //новая сессия. Старые куки игнорируются.
		curl_setopt ($ch_s, CURLOPT_HEADER, 1); //включаем получение заголовков
		$cookie_path = dirname(__FILE__).'\test.txt';
		curl_setopt($ch_s, CURLOPT_COOKIEFILE, $cookie_path);
		curl_setopt($ch_s, CURLOPT_COOKIEJAR, $cookie_path);

		}
	curl_setopt($ch_s, CURLOPT_URL, $site_url);
	curl_setopt($ch_s, CURLOPT_SSL_VERIFYPEER, false);
	curl_setopt($ch_s, CURLOPT_SSL_VERIFYHOST, false);
	curl_setopt($ch_s, CURLOPT_RETURNTRANSFER, 1); //возвращаем результат, вместо вывода результата на экран



	$data = curl_exec($ch_s);
	curl_close($ch_s);
    return $data;
}


function send_post_data ($post_url,$post_data) {
	// $post_data - PAST которые нужно отправить
	// $get_url - куда отправить ,$coo- строка куков,$refer - якобы откуда пришли, некоторые проверяют
	$ch = curl_init();
	//curl_setopt($ch, CURLOPT_PROXY, "http://192.168.2.600:2323");
	curl_setopt($ch, CURLOPT_URL, $post_url);
	curl_setopt($ch, CURLOPT_HEADER,1);
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //указываем, что результат запроса следует передать в переменную, а не вывести на экран
	curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
	curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
	curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); // разрешаем перенаправление
	curl_setopt($ch, CURLOPT_REFERER, 'https://www.livejournal.com/create.bml');
	$cookie_path = dirname(__FILE__).'\test.txt';
	curl_setopt($ch, CURLOPT_COOKIE,$cookie_path);
	curl_setopt($ch, CURLOPT_POST, true);
	curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
	curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
	curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)");
	curl_setopt($ch, CURLOPT_VERBOSE,1);
	$data = curl_exec($ch);
	$type=curl_multi_getcontent($ch);
	curl_close($ch);
	return $type;


	}



function preg($i){
 global $result;
 preg_match ('|'.$i.'|is' , $result, $r); // проверка на соотвествие рег.выражению
 return $r[1];
}



if (isset($_POST[submit])) {
	echo "Отправляем пост запрос<br />";


    $_POST['lj_form_auth'] = urlencode($_POST['lj_form_auth']);
    $_POST['username'] = urlencode($_POST['username']);
    $_POST['email'] = urlencode($_POST['email']);
    $_POST['password']= urlencode($_POST['password']);
    $_POST['challenge'] = urlencode($_POST['challenge']);
    $_POST['capcha'] = urlencode($_POST['capcha']);
	$post_data = $_POST['lj_form_auth'].'&Widget%5BCreateAccount%5D_user='.$_POST['username'].'&Widget%5BCreateAccount%5D_email='.$_POST['email'].'&Widget%5BCreateAccount%5D_password1='.$_POST['password'].'&Widget%5BCreateAccount%5D_password2='.$_POST['password'].'&Widget%5BCreateAccount%5D_bday_mm=3&Widget%5BCreateAccount%5D_bday_dd=12&Widget%5BCreateAccount%5D_bday_yyyy=1991&Widget%5BCreateAccount%5D_setLiveId=no&Widget%5BCreateAccount%5D_service_agree=on&recaptcha_challenge_field='.$_POST['challenge'].'&recaptcha_response_field='.$_POST['capcha'].'&Widget%5BCreateAccount%5D_submit=%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D1%82%D1%8C+%D0%B0%D0%BA%D0%BA%D0%B0%D1%83%D0%BD%D1%82';

    echo send_post_data ('https://www.livejournal.com/create.bml',$post_data);



	}

else {


	$result = ch('https://www.livejournal.com/create.bml',1);
	$sid = preg('name="lj_form_auth" value="(.*?)"');
	$url_js = preg('src="(https://api-secure.recaptcha.net.*?)"'); // файл js где хранится ИД картиники
	echo '$sid '.$sid.'<br />';
	echo '$url_js '.$url_js.'<br />';

	$result = ch($url_js,0);
	$url_pic = preg("challenge : '(.*?)'");
	echo '$url_pic '.$url_pic.'<br />';
	$picture = ch("http://api.recaptcha.net/image?c=".$url_pic,0); //берём картинку
	$fp_p=fopen("recapcha.png",'r');
	fwrite($fp_p,$picture);
	fclose($fp_p);





echo <<<HERE

<form method="POST" action="$_SERVER[SCRIPT_NAME]?submit=1">
<input type="hidden" name="lj_form_auth" value="$sid" />
<input type="hidden" name="livejournal_cookie" value="$sid" />
<input type="hidden" name="challenge" value="$url_pic" />
Имя пользователя: <input type="text" maxlength="16" value="" size="15" name="username" /><br>
Адрес email: <input type="text" maxlength="50" value="" size="28" name="email" /> <br>
Пароль: <input type="text" maxlength="31" value="" size="28" name="password" />  <br>
Дата рождения:
<select name="bday_mm">
<option value="1">Январь</option>
<option value="2">Февраль</option>
<option value="3">Март</option>
<option value="4">Апрель</option>
<option value="5">Май</option>
<option value="6">Июнь</option>
<option value="7">Июль</option>
<option value="8">Август</option>
<option value="9">Сентябрь</option>
<option value="10">Октябрь</option>
<option value="11">Ноябрь</option>
<option value="12">Декабрь</option>
</select>   <br>
<input type="text" maxlength="2" value="" size="2" name="day"/>
<input type="text" maxlength="4" value="" size="4" name="year"/>
Проверка, что вы человек: <br>
<img src="recapcha.png">     <br>
<input type="text" name="capcha" value="" /><br>
<input type="checkbox" checked="checked" value="1" />  <br>
<input type="submit" name="submit" value="Создать аккаунт" />
</form>

HERE;

}



?>
 
не получается выпарсить картинку с капчой. Выдается капчу различная чем на станице.
Можт кто подкинет скриптик сохранения картинки?
 
не получается выпарсить картинку с капчой. Выдается капчу различная чем на станице.
Можт кто подкинет скриптик сохранения картинки?

Пожалуйста. Вот кусок кода моего рабочего скрипта:

PHP:
		$query = http_build_query($query_arr);
		$html = $this->curl->post("http://securesignup.net/register_2.php",$query);

		preg_match('|src="(http://api.recaptcha.net/noscript\?k=.*?)"|is', $html, $out);
		$captcha_url = $out[1];
		$html = $this->curl->get($captcha_url);

		preg_match('|src="/image\?c=(.*?)"|is', $html, $out);
		$captcha_url = "http://api.recaptcha.net/image?c=".$out[1];
		$secure_id = $out[1];

		$captcha = $this->curl->get($captcha_url);

Разбирайся. Хотя, думаю, тут все понятно. Единственное, что использую свой класс-обертку на curl'ом - функции get, post.
 
Назад
Сверху