Имеется задача по парсингу данных из всплывающих окон с сайта. Данные подгружаются после нажатия на эту самую кнопку. Пробовал смотреть запросы которые идут при этом всём - когда появляется окно, ко мне прилетает JSON, но в нём нет самих данных, а только заголовки полей этого окна. Можно ли как-то отловить запрос, или же нужно прибегать к эмуляции нажатия на эту самую кнопку?
Просто выполните вручную требуемый запрос и посмотрите во вкладке Networks (Google Chrome, Dev Console) что именно отправляет и поступает на сервер. Ищите в списке xhr-запрос. Смотрите какие именно заголовки и данные отправляются на сервер, после чего выполняете эту эмуляцию в cURL.
Пробовал смотреть запросы которые идут при этом всём - когда появляется окно, ко мне прилетает JSON, но в нём нет самих данных, а только заголовки полей этого окна.
Вполне возможно, что там не один xhr-запрос, а несколько. В первом приходят данные для создания окна, а уже во втором поступает информация для загрузки. Но то, что данные приходят - это факт, просто надо все правильно отследить.
Конечно, еще может быть ситуация, когда все поступает через WebSockets, но они также отслеживаются при анализе сетевого трафика.
Чтобы воспроизвести AJAX-запрос используйте следующий код:
// headers
$headers = array(
'Cookie: ...',
'Host: ...',
...
);
// post fields
$post_fields = array(
'arg_1'=>'arg_1_value',
'arg_2'=>'agr_2_value',
...
);
// options
$options = array(
CURLOPT_URL => 'target_url',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HEADER => false,
CURLOPT_HTTPHEADER => $headers,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => http_build_query($post_fields),
CURLOPT_CONNECTTIMEOUT => 20,
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_TIMEOUT => 20,
CURLOPT_USERAGENT => 'your_user_agent'
);
// curl
$curl = curl_init();
curl_setopt_array($curl, $options);
$data = curl_exec($curl);
curl_close($curl);
В качестве заголовков ($headers) передаем массив, который передается в реальном запросе. Можно его передавать не весь, но как правило обязательными являются Cookies (если сайт требует авторизацию), также в некоторых случаях сервер проверяет Host, Referer, User Agent (его в принципе, тоже можно передать как заголовок).
Подавляющее большинство AJAX-запросов на практике идет через POST, поэтому в настройках указываем передачу методом POST и отправляем на сервер массив переменных (которые должны быть такими же, как при реальном запросе - agr_1, arg_2).
В качестве target_url указываем тот URL, к которому обращается скрипт при AJAX-запросе. В случае необходимости также можно подключить проксирование через HTTP/HTTPS или SOCKS5 (рекомендую второе).
В переменную $data пишутся данные, которые приходят в запросе. В случае необходимости также можно подключить вывод заголовков ответа (CURLOPT_HEADER) или отладку (CURLOPT_VERBOSE).
Виртуальный выделенный сервер (VDS) становится отличным выбором
Доброй ночи, у меня такой вопросКак реализовать фильтрацию на сайте через запрос к бд? То есть добавляются лоты и вписывается "1" или "2"
An exception occurred while executing 'INSERT INTO Answer (name_of_answ, right, Question_id) VALUES (?, ?, ?)' with params ["ок", 1, 133]:
Хочу сделать возможным редактирование конкретной статьи, а не всех имеющихся, не могу построить правильный запрос:
Проблема следующая: Пытаюсь вывести значения кастомных полей размещенных во вкладках, например: вкладка 1, вкладка 2, и тд