Всем привет! Занимаюсь версткой в seo-компании, немного знаком с php, попросили сделать авторег аккаунтов яндекса, для парсинга выдачи через Key Collector. Нарисовал 2 функции, одна берет данные с
https://passport.yandex.ru/registration, включая каптчу. Другая эту каптчу обрабатывает через api ruCaptcha и возвращает ответ. Но получается что когда я пытаюсь внести данные на страницу яндекса через curl, то каптча уже сменилась.
function regYandexAcc($login, $pass)
{
$url = 'https://passport.yandex.ru/registration';
$cookiefile = 'cookie.txt';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url ); // отправляем на
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0");
curl_setopt($ch, CURLOPT_HEADER, 0); // пустые заголовки
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // возвратить то что вернул сервер
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); // следовать за редиректами
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);// таймаут
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_COOKIESESSION, false);
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookiefile); // сохранять куки в файл
curl_setopt($ch, CURLOPT_POST, true);
$str = curl_exec($ch);
$dom = new DOMDocument();
$dom->loadHTML($str);
$imgfind = $dom->getElementsByTagName('img');
$inputFind = $dom->getElementsByTagName('input');
foreach ($inputFind as $key) {
$secret[] = $key->getAttribute('value');
}
foreach($imgfind as $im) {
$test = parse_url($im->getAttribute('src'));
if($test['host'] == 'ext.captcha.yandex.net'){
file_put_contents('captcha.png', file_get_contents($im->getAttribute('src')));
$secret[1] = reCaptcha(); //получаем каптчу через сервис ruCaptha
}
}
$postLoginFields = array();
$postLoginFields['track_id'] = $secret[0];
$postLoginFields['language'] = 'ru';
$postLoginFields['firstname'] = $login;
$postLoginFields['lastname'] = $login;
$postLoginFields['login'] = $login;
$postLoginFields['password'] = $pass;
$postLoginFields['password_confirm'] = $pass;
$postLoginFields['human-confirmation'] = 'captcha';
$postLoginFields['hint_question_id'] = 15;
$postLoginFields['hint_answer'] = $login;
$postLoginFields['key'] = $secret[20];
$postLoginFields['captcha_mode'] = 'text';
$postLoginFields['answer'] = $secret[1];
$postLoginFields['eula_accepted'] = true;
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookiefile);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($postLoginFields));
$output = curl_exec($ch);
echo $output;
echo '<pre>';
var_dump($postLoginFields);
echo '</pre>';
// return $output;
}
regYandexAcc('Aleks123qwerty122', "asdasfasfasfaa3312");
Я понимаю что проблема в том что curl_exec($ch); прерывает соединение. Что нужно как-то посылать cookie или заголовки. Но как это сделать, понятия не имею. Подскажите плз...