Добрый день. Пытаюсь отправить POST запрос на другой сайт, через cURL. Адрес https://promokod.pikabu.ru/coupon/5ka/Lty7boqhMLLy хочу получить ответ в котором есть json, оттуда вытащить ключ promocode. Предполагаю, что требуется для начала получить куки. Захожу на страницу и получаю куки, пытаюсь отправить POST, но в ответ получаю ошибку { "message": "CSRF token mismatch." }. Делаю так: Код | <?php // Инициализация cURL-сессии для GET-запроса страницы и извлечения CSRF-токена $ch = curl_init(); // Установка параметров cURL-сессии для GET-запроса curl_setopt($ch, CURLOPT_URL, 'https://promokod.pikabu.ru/shops/5ka'); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0'); // Выполнение GET-запроса $response = curl_exec($ch); // Закрытие cURL-сессии curl_close($ch); // Парсинг страницы для извлечения CSRF-токена preg_match('/<meta name="csrf-token" content="(.+?)">/', $response, $matches); if (isset($matches[1])) { $csrf_token = $matches[1]; } else { die("CSRF-токен не найден"); } // Заголовки для POST-запроса $headers = [ "Accept: application/json, text/plain, */*", "Accept-Encoding: gzip, deflate, br", "Accept-Language: ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7", "Connection: keep-alive", "Content-Length: 2", "Content-Type: application/json;charset=UTF-8", "Cookie: pcid=4yDnaZt3zv2; ...", "DNT: 1", "Host: promokod.pikabu.ru", "Origin: https://promokod.pikabu.ru", "Referer: https://promokod.pikabu.ru/shops/5ka", "Sec-Fetch-Dest: empty", "Sec-Fetch-Mode: cors", "Sec-Fetch-Site: same-origin", "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36", "X-Requested-With: XMLHttpRequest", "X-XSRF-TOKEN: " . $csrf_token ]; // Инициализация cURL-сессии для POST-запроса $ch = curl_init(); // Установка параметров cURL-сессии для POST-запроса curl_setopt($ch, CURLOPT_URL, 'https://promokod.pikabu.ru/coupon/5ka/Lty7boqhMLLy'); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode([])); // Данные запроса (пустой JSON в данном случае) // Выполнение POST-запроса $response = curl_exec($ch); // Закрытие cURL-сессии curl_close($ch); // Обработка ответа от сервера echo $response; ?>
|
Заголовки запроса, которые посылает браузер: https://habrastorage.org/webt/65/1f/97/651f...eb781392808.pngВ итоге я получаю ошибку 419 Page Expired. https://habrastorage.org/webt/... 477059.png
|