Я сейчас тренеруюсь работать с CURL. Ну и решил написать авто-регер для одного сайта. Конечно не полностью автоматический, т.к. капча там трудная. Каждый заход на эту страницу меняется капча. Я хочу сделать, чтобы пользователь вводил капчу, но не знаю как такое реализовать. Вот что у меня есть: PHP: <?php header('Content-type: text/html; charset=KOI8-R'); $ch = curl_init('http://rutube.ru/register.html'); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); if(!isset($_POST['caph'])){ $prs = curl_exec($ch); preg_match_all('/<img src="\/img\/code\.jpg\?[0-9]{7}" alt="Captcha" width="120" height="40" \/>/', $prs, $prs0); $prs0 = str_replace('<img src="/img/code.jpg?', "", $prs0[0][0]); $prs0 = str_replace('" alt="Captcha" width="120" height="40" />', "", $prs0); $cap = $prs0; echo "<img src='http://rutube.ru/img/code.jpg?$cap'>"; echo "<form method=post><input name=caph type=text></form>"; }else{ $caph = $_POST['caph']; curl_setopt($ch, CURLOPT_POST, 1); curl_setopt ($ch, CURLOPT_USERAGENT, "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; ru; rv:1.9.0.19) Gecko/2010031422 Firefox/3.0.19"); $headers = array ( 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 'Accept-Language: ru,en-us;q=0.7,en;q=0.3', 'Accept-Encoding: gzip,deflate', 'Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7', ); curl_setopt($ch,CURLOPT_ENCODING,""); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($ch, CURLOPT_HTTPHEADER,$headers); curl_setopt($ch, CURLOPT_REFERER, "http://rutube.ru/register.html"); curl_setopt($ch, CURLOPT_POSTFIELDS, [email='rm=save&nick=zlosn&email=klickers-ru@yandex.ru]'rm=save&nick=zlosn&email=klickers-ru@yandex.ru[/email]&pass=curl_pass&cpass=curl_pass&word='.$caph.'&agree=y'); curl_setopt($ch, CURLOPT_COOKIEJAR, "my_cookies.txt"); curl_setopt($ch, CURLOPT_COOKIEFILE, "my_cookies.txt"); $result = curl_exec($ch); echo $result; } curl_close($ch); ?> Поле с капчей это word. Как видите, перед тем как сделать запрос на регу, я даю капчу, чтобы ввели и она потом отправляется в http://rutube.ru/register.html. Но всёравно пишет, что не верный код, я думаю, потому что капча меняется при иницилизации curl_init(). Как добиться желаемого результата?
Наверняка многие здес смогли бы решить эту задачу, но просто нужно лезть, смотреть, разбираться, как устроена капча на конкретно том сайте, который тебе нужен, а это как-то влом. Могу предположить, что при отправке курл-запроса на регистрацию тебе нужны куки, которые устанавливаются либо при обращении к http://rutube.ru/register.html либо при обращении к http://rutube.ru/img/code.jpg
Я до этого уже докопался. Вот новый код: PHP: <?php session_start(); header('Content-type: text/html; charset=KOI8-R'); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "http://rutube.ru/register.html"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); if(!isset($_POST['caph'])){ if($_SESSION['cooki']!=""){ $cook = $_SESSION['cooki']; $headers = array ( 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 'Accept-Language: ru,en-us;q=0.7,en;q=0.3', 'Accept-Encoding: gzip,deflate', 'Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7', 'Cookie: '.$cook, ); curl_setopt($ch, CURLOPT_HTTPHEADER,$headers); } curl_setopt ($ch, CURLOPT_HEADER, true); $prs = curl_exec($ch); preg_match_all('/<img src="\/img\/code\.jpg\?[0-9]*" alt="Captcha" width="120" height="40" \/>/', $prs, $prs0); preg_match_all('/Set-Cookie:.*/', $prs, $prs1); $prs1 = str_replace('Set-Cookie:', "", $prs1[0][0]); $prs1 = explode(";", $prs1); $prs1 = trim($prs1[0]); $_SESSION['cooki'] = $prs1; $prs11= str_replace('xsid=', "", $prs1); SetCookie("xsid", $prs11); $prs0 = str_replace('<img src="/img/code.jpg?', "", $prs0[0][0]); $prs0 = str_replace('" alt="Captcha" width="120" height="40" />', "", $prs0); $cap = $prs0; echo "<img src='http://rutube.ru/img/code.jpg?$cap'>"; echo "<form method=post><input name=caph type=text></form>"; }else{ $cook = $_SESSION['cooki']; $caph = $_POST['caph']; curl_setopt($ch, CURLOPT_POST, 1); curl_setopt ($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 6.1; ru; rv:1.9.0.19) Gecko/2010031422 Firefox/3.0.19"); $headers = array ( 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 'Accept-Language: ru,en-us;q=0.7,en;q=0.3', 'Accept-Encoding: gzip,deflate', 'Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7', 'Cookie: '.$cook, ); curl_setopt($ch,CURLOPT_ENCODING,""); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($ch, CURLOPT_HTTPHEADER,$headers); curl_setopt($ch, CURLOPT_REFERER, "http://rutube.ru/register.html"); curl_setopt($ch, CURLOPT_POSTFIELDS, [email='rm=save&nick=zlosn&email=ks@yasx.ru]'rm=save&nick=zlosn&email=ks@yasx.ru[/email]&pass=curl_pass&cpass=curl_pass&word='.$caph.'&agree=y'); curl_setopt($ch, CURLOPT_COOKIEJAR, "my_cookies.txt"); curl_setopt($ch, CURLOPT_COOKIEFILE, "my_cookies.txt"); $result = curl_exec($ch); echo $result; } curl_close($ch); ?> Кука называется xsid и в этом коде я её добавляю, но всёравно ошибка при вводе капчи( Может я не правильно добавил куку?