Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как правильно отправить POST запрос ? 
:(
    Опции темы
Sice
  Дата 9.10.2023, 11:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Радио Онлайн
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 4.12.2007

Репутация: 0
Всего: 0



Добрый день. Пытаюсь отправить 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
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0929 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.