cURL сессия, и передача токена в заголовках

Обсуждение серверного программирования.

Модераторы: Duncon, Yurich

Ответить
arashvg
Сообщения: 0
Зарегистрирован: 18 дек 2008, 20:27

cURL сессия, и передача токена в заголовках

Сообщение arashvg » 31 янв 2019, 19:38

собственно что именно делаю, есть страница, с которой нужно получить некоторую информацию, все бы было хорошо, но часть контента подгружается отдельно, и насколько понял с использованием токенна безопасности и сохранением сессии куков.

Бьюсь уже второй день никак не могу получить нужную информацию. Сначала получаю основную страницу, получаю из нее нужный мне ИД и токкен, сохраняю куки, формирую заголовки, и пробую делать запрос к второй странице, которая должна отдать массив в формате джосон, но в итоге получаю ответ 404....

уже наверное все перепробовал, может делаю что-то не так? может кто-то сталкивался с подобной проблемой?

Код: Выделить всё

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://marathons.ahotu.com/event/casa-grande-half-marathon-5k');
//первая страница
curl_setopt($ch, CURLOPT_USERAGENT,'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/32.0.1700.107 Chrome/32.0.1700.107 Safari/537.36');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_COOKIESESSION, true);
curl_setopt ($ch, CURLOPT_COOKIEJAR, 'COOKI.txt'); 
curl_setopt ($ch, CURLOPT_COOKIEFILE, 'COOKI.txt'); 
$answer = curl_exec($ch);
if (curl_error($ch)) {
    echo curl_error($ch);
}

preg_match('/<meta name="csrf-token" content="(.*?)" \/>/is', $answer, $token); //получаю токен
preg_match('/<add-event-info id="(.*?)" locale="en"/is', $answer, $id); //получаю id


curl_setopt($ch, CURLOPT_URL, 'https://marathons.ahotu.com/media?a_event_id='.$id['1']);
curl_setopt($ch, CURLOPT_POST, false);

//Формирую заголовки

$headers[] = 'X-CSRF-Token:'.$token['1'];
$headers[] = 'Accept: application/json, text/plain, */*';
$headers[] = 'X-Requested-With: XMLHttpRequest';
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

curl_setopt($ch, CURLOPT_REFERER,'https://marathons.ahotu.com/event/casa-grande-half-marathon-5k');     
curl_setopt($ch, CURLOPT_POSTFIELDS, "");
$answer = curl_exec($ch);
if (curl_error($ch)) {
    echo curl_error($ch);
}
echo $answer; 
если входить на эту страницу через браузер, то тоже выдает ошибку 404, но если грузить основную страницу, то вся информация отображается

тоесть я через консоль просмотрел запросы

http://copy-lend.ru/work/pars-marathons/2.jpg

которые проходят при загрузке основной тсраницы https://marathons.ahotu.com/event/casa- ... arathon-5k

там в процесе ее отображения идет ГЕТ запрос по адресу https://marathons.ahotu.com/media?a_event_id=12866

результатом этого запроса есть массив JSON, вопрос как получить такой же результат через cURL, в коде видно, что и токен и куки сохраняю и использую их, может что-то не так сделал, уже даже не знаю...

Аватара пользователя
Duncon
Сообщения: 1974
Зарегистрирован: 10 окт 2004, 13:11
Откуда: Питер
Контактная информация:

Re: cURL сессия, и передача токена в заголовках

Сообщение Duncon » 31 янв 2019, 22:58

Прочитай про все свойства CURL, возможно на проверку SSL реакция идёт. А вообще - 404 это страница не найдена, куда-то не туда ломишься..
[syntax=Delphi] [/syntax]

Ответить