Хочу получить результаты из формы на странице https://rosreestr.ru/wps/portal/p/cc_ib_portal_services/online_request/
Там есть каптча. Ее получил. Так же получил код из url который генирируется. Сделал запись куки. Получаю каптчу парсером, ввожу ее - но в итоге отвечает что каптча не варная.
При этом если перейти браузером на страницу то я буду видеть те же цифры на каптче что и в парсере мне выдает, и когда ввожу в браузере ее - все нормально. Чего-то не хватает видимо у меня, не могу понять чего.
Привожу свой код, который можно воспроизвести, только нужно будет подключить библиотеку HTML DOM PARSER:
session_start();
require_once __DIR__ . '/simple_html_dom_parser.php';
if (!$_GET) {
$url = 'https://rosreestr.ru/wps/portal/p/cc_ib_portal_services/online_request/';
$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, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // возвратить то что вернул сервер
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0); // следовать за редиректами
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);// таймаут4
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);// просто отключаем проверку сертификата
curl_setopt($ch, CURLOPT_COOKIEJAR, dirname(__FILE__).'/my_cookies.txt'); // сохранять куки в файл
curl_setopt($ch, CURLOPT_COOKIEFILE, dirname(__FILE__).'/my_cookies.txt');
$content = curl_exec($ch);
preg_match_all('/^Content-Location:(.*)$/mi', $content, $matches);
if (!empty($matches[1])) { $realUrl = trim($matches[1][0]); }else{ exit('No real url'); }
$findCaptcha = str_get_html($content);
$img = $findCaptcha->find('tr td #captchaImage2');
$urlCaptcha = $img[0]->src;
$key = str_replace(array('p0/', '=NJcaptcha=/'), '', $urlCaptcha);
$goToCaptcha = 'https://rosreestr.ru'.$realUrl.$urlCaptcha;
$dopUrlForm = '=MEcontroller!QCPSearchAction==/';
$formToUrl = explode('/', $realUrl);
array_splice($formToUrl, 10);
$goFormTo = 'https://rosreestr.ru'.implode('/', $formToUrl).'/p0/'.$key.$dopUrlForm;
echo "<img src='".$goToCaptcha."'>";
echo "<form method='get'><input type='text' name='captcha'><input type='submit' value='go'></form>";
$_SESSION['referer'] = 'https://rosreestr.ru'.$realUrl;
$_SESSION['form'] = $goFormTo;
}else{
$post = 'search_action=true&subject=®ion=&settlement=&cad_num=&start_position=59&obj_num=&old_number=&search_type=ADDRESS&subject_id=120000000000®ion_id=120401000000&street_type=str0&street=&house=54%2F5&building=&structure=&apartment=&right_reg=&encumbrance_reg=&captchaText='.$_GET['captcha'];
$ch1 = curl_init();
curl_setopt($ch1, CURLOPT_URL, $_SESSION['form']);
curl_setopt($ch, CURLOPT_COOKIEJAR, dirname(__FILE__).'/my_cookies.txt'); // сохранять куки в файл
curl_setopt($ch1, CURLOPT_COOKIEFILE, dirname(__FILE__).'/my_cookies.txt');
curl_setopt($ch1, CURLOPT_POST, 1);
curl_setopt($ch1, CURLOPT_POSTFIELDS, $post);
curl_setopt($ch1, CURLOPT_REFERER, $_SESSION['referer']);
curl_setopt($ch1, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0");
curl_setopt($ch1, CURLOPT_HEADER, array('Host: rosreestr.ru', 'Origin: https://rosreestr.ru', 'Upgrade-Insecure-Requests: 1'));
curl_setopt($ch1, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch1, CURLOPT_FOLLOWLOCATION, 0);
curl_setopt($ch1, CURLOPT_CONNECTTIMEOUT, 30);
curl_setopt($ch1, CURLOPT_SSL_VERIFYPEER, false);
$data = curl_exec($ch1);
echo $data;
}
Буду благодарен за помощь!
Насколько я понял, Ваш код работать в приведенном виде вообще не сможет:
$goFormTo = 'https://rosreestr.ru'.implode('/', $formToUrl).'/p0/'.$key.$dopUrlForm;
должно быть заменено на
$goFormTo = 'https://rosreestr.ru/'.implode('/', $formToUrl).'/p0/'.$key.$dopUrlForm;
// ^
А в остальном, всё вполне работает из командной строки, в том числе и с несколько упрощенными параметрами:
curl -b cookies.txt -c cookies.txt -i -o index.html https://rosreestr.ru/wps/portal/p/cc_ib_portal_services/online_request/
curl -b cookies.txt -c cookies.txt -o captcha.png https://rosreestr.ru/wps/portal/p/cc_ib_portal_services/online_request/!ut/p/z1/04_Sj9CPykssy0xPLMnMz0vMAfIjo8zi3QNNXA2dTQy93QMNzQ0cPR29DY0N3Q0MQkz1w_Eq8DfUj6JEP1ABSL8BDuBoANQfhdcKZyMCCkBOJGRJQW5ohEGmpyIAKLXudw!!/dz/d5/L2dBISEvZ0FBIS9nQSEh/p0/IZ7_01HA1A42KODT90AR30VLN22001=CZ6_GQ4E1C41KGQ170AIAK131G00T5=NJcaptcha=
curl -b cookies.txt -c cookies.txt -o reply.html -X POST -H "Content-Type: application/x-www-form-urlencoded" -d "search_action=true&subject=®ion=&settlement=&cad_num=&start_position=59&obj_num=&old_number=&search_type=ADDRESS&subject_id=145000000000®ion_id=145263000000&street_type=str0&street=&house=&building=&structure=&apartment=&right_reg=&encumbrance_reg=&captchaText=53649" https://rosreestr.ru/wps/portal/p/cc_ib_portal_services/online_request/!ut/p/z1/04_Sj9CPykssy0xPLMnMz0vMAfIjo8zi3QNNXA2dTQy93QMNzQ0cPR29DY0N3Q0MQkz1w_Eq8DfUj6JEP1ABSL8BDuBoANQfhdcKZyMCCkBOJGRJQW5ohEGmpyIAKLXudw!!/p0/IZ7_01HA1A42KODT90AR30VLN22001=CZ6_GQ4E1C41KGQ170AIAK131G00T5=MEcontroller!QCPSearchAction==/
Оборудование для ресторана: новинки профессиональной кухонной техники
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Экспериментирую с созданием сайта-каталога с админ панелью на laravel 58
Получена коллекция с помощью модели eloquent: