yandex.ru/checkcaptcha и HTTP/1.1 400 Bad request

12
LEOnidUKG
На сайте с 25.11.2006
Offline
1774
4641

Не могу понять в чём прикол. Всё беру через curl, парсю составляю урл, получают ответ на каптчу.

Получается урл:

http://yandex.ru/checkcaptcha?key=20TG7pcGAf8IxtMo8GgZBJrodSTeWHly_0%2F1401094426%2F09e2b0ccbc647ea6ab73ae6ce9056650_534198f7387637e9de595c1b3a8938e4&retpath=http%3A%2F%2Fyandex.ru%2Fyandsearch%3Fclid%3D9582%26text%3Dsdfsdf_e0b2089dc18823395fd608ca8f072cff&rep=zxcxzc

400 ошибка, плохой запрос o_O

Беру потом через браузер получается, тот же урл:

http://yandex.ru/checkcaptcha?key=30rjTm94F0YF3SDskXfuQXjduzfzFjrm_0%2F1401091076%2F1dc916f613d20cb59d0c4f5d52b567b8_6e1e432c3bcf7c57ed6ff6c9d19d8d68&retpath=http%3A%2F%2Fyandex.ru%2Fyandsearch%3Fclid%3D9582%26text%3Dsdfsdf_1a92996014bc7dbdf251ba5da85d706b&rep=zxcxzc

Всё ок.

В чём подвох?!

---------- Добавлено 26.05.2014 в 16:18 ----------

Никто на PHP не распознаёт каптчу Яндекса? :)

✅ Мой Телеграм канал по SEO, оптимизации сайтов и серверов: https://t.me/leonidukgLIVE ✅ Качественное и рабочее размещение SEO статей СНГ и Бурж: https://getmanylinks.ru/ ✅ Настройка и оптимизация серверов https://getmanyspeed.ru/
S1
На сайте с 28.03.2010
Offline
72
#1
LEOnidUKG:
Не могу понять в чём прикол. Всё беру через curl, парсю составляю урл, получают ответ на каптчу.

Получается урл:

http://yandex.ru/checkcaptcha?key=20TG7pcGAf8IxtMo8GgZBJrodSTeWHly_0%2F1401094426%2F09e2b0ccbc647ea6ab73ae6ce9056650_534198f7387637e9de595c1b3a8938e4&retpath=http%3A%2F%2Fyandex.ru%2Fyandsearch%3Fclid%3D9582%26text%3Dsdfsdf_e0b2089dc18823395fd608ca8f072cff&rep=zxcxzc

400 ошибка, плохой запрос o_O

Беру потом через браузер получается, тот же урл:

http://yandex.ru/checkcaptcha?key=30rjTm94F0YF3SDskXfuQXjduzfzFjrm_0%2F1401091076%2F1dc916f613d20cb59d0c4f5d52b567b8_6e1e432c3bcf7c57ed6ff6c9d19d8d68&retpath=http%3A%2F%2Fyandex.ru%2Fyandsearch%3Fclid%3D9582%26text%3Dsdfsdf_1a92996014bc7dbdf251ba5da85d706b&rep=zxcxzc

Всё ок.

В чём подвох?!

---------- Добавлено 26.05.2014 в 16:18 ----------

Никто на PHP не распознаёт каптчу Яндекса? :)

Думаю это элементарно. Браузер отправляет кучу заголовков в отличии же от curl. Можно было бы увидеть код с помощью которого идет отправка запроса?

ICQ: 3533966 | Skype: spider13software | E-Mail: admin@spider13.net | Telegram: spider13software| Разработчик Node.js (https://spider13.net/) | Заметки онлайн (https://notes.spider13.net/)
LEOnidUKG
На сайте с 25.11.2006
Offline
1774
#2
spider13:
Думаю это элементарно. Браузер отправляет кучу заголовков в отличии же от curl. Можно было бы увидеть код с помощью которого идет отправка запроса?

Изначальный key, который показывается в браузере подходит ВЕЗДЕ т.е. через другой браузер, через curl, через всё что угодно он будет работать.

Если получить key через curl скрипт, то всегда будет отдавать 400 ошибку.

Тут дело не в отправке как мне кажется данных, а в получении.

VulkanPartner
На сайте с 27.03.2014
Offline
91
#3
LEOnidUKG:

Никто на PHP не распознаёт каптчу Яндекса? :)

Именно для Яндекса эффективней использовать сервисы вроде rucaptcha и т.п., чем писать распознавалку, проверено ;)

https://perestroika.team/ru/ (https://perestroika.team/ru/) Perestroika Affiliates- ведущая гемблинг-партнерка. RevShare - до 60%. CPA - до 150$.
S1
На сайте с 28.03.2010
Offline
72
#4
LEOnidUKG:
Изначальный key, который показывается в браузере подходит ВЕЗДЕ т.е. через другой браузер, через curl, через всё что угодно он будет работать.

Если получить key через curl скрипт, то всегда будет отдавать 400 ошибку.

Тут дело не в отправке как мне кажется данных, а в получении.

Честно говоря не совсем понимаю проблему. Если правильно сформировать запрос, то разницы никакой нет браузер это или библиотека curl. Можешь посмотреть как это реализовано в PanelWM. В архиве будет файл /protected/components/SeoChecker.php в нем как раз и есть реализация получения капчи. А даже существует возможность распознавать через anticaptcha.

LEOnidUKG
На сайте с 25.11.2006
Offline
1774
#5

ДАЖЕ, если я показываю скаченную через curl страницу и хочу руками ввести каптчу, мне всё равно 400 ошибка в браузере.

---------- Добавлено 26.05.2014 в 17:10 ----------

VulkanPartner:
Именно для Яндекса эффективней использовать сервисы вроде rucaptcha и т.п., чем писать распознавалку, проверено ;)

Ещё раз топик читайте внимательно.

S1
На сайте с 28.03.2010
Offline
72
#6
LEOnidUKG:
ДАЖЕ, если я показываю скаченную через curl страницу и хочу руками ввести каптчу, мне всё равно 400 ошибка в браузере.
Ещё раз топик читайте внимательно.

Думаю это и не удивительно. Ведь скачивание произошло с помощью одного браузера(curl) и думаю поле User-Agent Вы не заполняли? А теперь вставили эту строчку в браузер и User-Agent пошел другой. Думаю она предусмотрели систему защиты от подобных ситуаций.

Для начала попробуйте воспользоваться каким то компонентом, который эмулирует запросы браузера через curl. Если же не получится, то воспользуйтесь сниффером и посмотрите разницу в запросах.

LEOnidUKG
На сайте с 25.11.2006
Offline
1774
#7

Никто не читает, что я пишу. Все у нас писатели.

Да я уже 8-мь лет скрипты пишу. Емаё, люди :)

Харе мне тут про модуля писать. Я тут не один сижу, не врубаемся мы в чём тут дело.

ЕЩЁ РАЗ:

УРЛ полученный через браузер РАБОТАЕТ ВЕЗДЕ!

УРЛ полученный через curl НИГДЕ не работает!

файл /protected/components/SeoChecker.php

Ничего там такого нету, всё тоже самое.

P
На сайте с 25.05.2007
Offline
103
#8
LEOnidUKG:
Если получить key через curl скрипт, то всегда будет отдавать 400 ошибку.

Я тут проверил такое


function curl_get_page($url)
{
$ret = false;
if( function_exists('curl_init') ){
if( $curl = curl_init() ){
if( !curl_setopt($curl,CURLOPT_URL,$url) ) return $ret;
if( !curl_setopt($curl,CURLOPT_RETURNTRANSFER,true) ) return $ret;
if( !curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true) ) return $ret;// разрешаем редирект
if( !curl_setopt($curl,CURLOPT_TIMEOUT,15) ) return $ret; //масимальное время выполнения операции в секундах
if( !curl_setopt($curl,CURLOPT_HEADER,false) ) return $ret;
$ret = curl_exec($curl);
$out['source'] = $ret;
$out['getinfo'] = curl_getinfo($curl);
curl_close($curl);
}
}
else
{
die ('cURL не подключен.');
}
return $out;
}

$url = 'http://yandex.ru/yandsearch?clid=9582&text=sdfsdf&lr=213';
for ($i=0; $i < 10; $i++) //чтоб стопудов капча была
{
$source = curl_get_page($url);
}
echo '<pre>';print_r($source);echo '</pre>';

нормально, ответ 200.

Или я тоже неправильно понял проблему?

coolakov.ru/tools (http://coolakov.ru/tools/): определение конкурентов (http://coolakov.ru/tools/most_promoted/), кластеризация запросов (http://coolakov.ru/tools/razbivka/) и т.д.
Дмитрий
На сайте с 23.08.2006
Offline
222
#9

LEOnidUKG, а заголовки отправленные браузером и curl'ом сравнивали? Идеетично сделали?

Разрабатываю и автоматизирую на php http://jonnyb.ru/
LEOnidUKG
На сайте с 25.11.2006
Offline
1774
#10

Это я думаю умно конечно... Брать каптчу от Яндекс.Маркета и проверять её на Яндекс.Поиск...

:D

6-ть часов прожито зря :(

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий