Всем привет. Пожалуйста, оставьте моральную сторону вопроса вне обсуждений.
Возможно кто-то работал над этим...
Стоит задача - парс выдачи гугла.
Код:
/**
* Получаем html запроса
* @param string $url адрес запроса
* @return string html выдачи
*/
private function getHtml($url)
{
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/45.0.2454.101 Chrome/45.0.2454.101 Safari/537.36');
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
$response = curl_exec($curl);
if(curl_getinfo($curl,CURLINFO_HTTP_CODE) !== 200)
{
# Получаем картинку и куки
$imgUrl = phpQuery::newDocument($response)->find("img")->attr("src");
$curlImage = curl_init();
curl_setopt($curlImage, CURLOPT_URL, "https://www.google.ru".$imgUrl);
curl_setopt($curlImage, CURLOPT_USERAGENT, 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/45.0.2454.101 Chrome/45.0.2454.101 Safari/537.36');
curl_setopt($curlImage, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curlImage, CURLOPT_COOKIEJAR, __DIR__."/../../html/assets/cookies.txt");
file_put_contents("assets/captcha.jpg", curl_exec($curlImage));
curl_close($curlImage);
# Расшифровываем капчу
$antiCaptcha = new AntiCaptcha;
$antiCaptcha->sendCaptcha();
$captcha = $antiCaptcha->getCaptchaValue();
# Формируем url запроса
$url = "https://ipv4.google.com/sorry/CaptchaRedirect?continue=".urlencode(phpQuery::newDocument($response)->find("[name=\"continue\"]")->attr("value"))
."&id=".urlencode(phpQuery::newDocument($response)->find("[name=\"id\"]")->attr("value"))
."&captcha=".$captcha
."&submit="."Submit";
# Переходим по URL со всеми нужными данными
$curlGoogleAntiCaptcha = curl_init();
curl_setopt($curlGoogleAntiCaptcha, CURLOPT_URL, $url);
curl_setopt($curlGoogleAntiCaptcha, CURLOPT_USERAGENT, 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/45.0.2454.101 Chrome/45.0.2454.101 Safari/537.36');
curl_setopt($curlGoogleAntiCaptcha, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curlGoogleAntiCaptcha, CURLOPT_COOKIEFILE, __DIR__."/../../html/assets/cookies.txt");
$result = curl_exec($curlGoogleAntiCaptcha);
// Вот тут почему-то мне опять выдаётся страница с капчей (((
return $result;
}
curl_close($curl);
return $response;
}
Описание:
1. Если код ответа !== 200, идём по redirect url.
2. Сохраняем из этой страницы все значения нужных нам input-ов
3. Получаем картинку капчи, сохраняем в файлик куки (да, они выдаются только с картинкой)
4. Через отдельный класс расшифровываем капчу
5. Подставляем куки, значение капчи, идём по верному URL
И тут нам опять выдаётся капча... Что я делаю не так?
P.S.: Капча расшифровывается правильно. На 5ом шаге URL точно правильный.