Добрый день. Пытаюсь получить данные промокодов из
https://edadeal.ru/coupons
Вижу, что в запросах есть авторизация, копирую куки и заголовки, которые получил от браузера, делаю несколько запросов.
Сначала на получите uid купона, потом на запрос к этому uid, после на получение самого промокода, выглядит так:
$unix_time = round(microtime(true) * 1000);
$unix_time_short = substr($unix_time, 0, -3);
$url = "https://teleport.edadeal.ru/wallet/v2/campaigns";
$ch = curl_init($url);
$headers = [
"Accept: application/json",
"Accept-Encoding: gzip, deflate, br",
"Accept-Language: ru",
"Connection: keep-alive",
"Content-Type: application/json",
"Cookie: edadeal_auth=\"eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJkdWlkIjoiNWYxNTI1YTQtZjI0Ni00ODg2LWIxMzgtZmUzYjNkYTA4NjVjIiwiYXVkIjoidXNyIiwiZXhwIjoxNzI3Mzc5NjMyLCJqdGkiOiI1MWY4MDFmZS1hNzdjLTRiYTMtYWMxOS1iZTllMmJiMTFmYWMiLCJpYXQiOjE2OTU5MzAwMzIsImlzcyI6Imh0dHBzOi8vdXNyLmVkYWRlYWwucnUiLCJuYmYiOjE2OTU5MzAwMzIsInN1YiI6Imh0dHBzOi8vdXNyLmVkYWRlYWwucnUifQ.MmgCL-oYHOeiGT0e3EWDIxK5PxY1nS_wg_19cpBgvpsn_nMlEwmAjUdk_YNHW1mkgEJyAR_qXsX2ktqpzTxXLFgoIMVqX5Agy86hGxEZPE-yT8CH8BhlceFhlVKK5inTc2hdr7pUJIW7Xy6rGzOqQpuXM5MdqO-1gmVg2XWfFfc\"",
"edid=\"eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzUxMiJ9.eyJkdWlkIjoiNWYxNTI1YTRmMjQ2NDg4NmIxMzhmZTNiM2RhMDg2NWMiLCJ2cnQiOjEsImV4cCI6MTk5NzcyNTIyNywibmJmIjoxNjk1OTMwMDA3fQ.zFgc7NaFdW_dU8bGRHHv48UMgWNi9p75MA-jjDi90ENzvjQuCsRlB5jOLwE_e9OxcwfLibH9waA4J-JOTHYlGFKgDGXnb2-w_9MSE7Sqo8iJExBxRuylhj4L4P8d-8xiG8IiyI0tP00ZsfNPYW8yZ_09dZET47XnX3beBAFxXDw\"",
"i=\"6xchFu1B3MkcliUfYMhZGAV9YVP+PrJxvcwBCVbOvf3a/hLsjjmphVAJKMOIJop3myz4AtnzDjyIxSmAHn9V7WQHL3A=\"",
"mda2_beacon=\"$unix_time\"",
"sessar=\"1.1182.CiADNPm1WoeEFUve75ydQwDnFUp4iX5DAP1hIMxK38QOwg.I5Fbj2iEj7VysHpwQ5ADryqrctWQBT0L4wqTmH2SKo0\"",
"Session_id=\"noauth:$unix_time_short\"",
"sso_status=\"sso.passport.yandex.ru:synchronized_no_beacon\"",
"yandex_login=\"\"",
"yandexuid=\"154937764".$unix_time_short."\"",
"ys=\"c_chck.754076172\"",
"User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/117.0",
"Host: teleport.edadeal.ru",
"Origin: https://edadeal.ru",
"Referer: https://edadeal.ru/",
"x-app-id: edadeal",
"x-app-version: 1.56.0",
"x-locality-geoid: 213",
"x-os-version: 1.0.0",
"x-platform: desktop",
"x-position-latitude: 55.755863",
"x-position-longitude: 37.6177"
];
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$response = curl_exec($ch);
curl_close($ch);
// Выводим результат
if ($response === false) {
echo "Ошибка при выполнении запроса: " . curl_error($ch);
} else {
$responseData = json_decode($response, true);
if ($responseData === null or count($responseData['campaigns']) <= 10) {
echo "Ошибка при разборе JSON-ответа или пустой ответ, нет данных в campaigns.";
} else {
echo "<pre>";
// Цикл для выполнения запросов
for ($x = 0; $x < 1; $x++) {
$slug = $responseData['campaigns'][$x]['slug'];
$secondUrl = "https://teleport.edadeal.ru/wallet/v2/campaigns/{$slug}?seo=1";
$ch = curl_init($secondUrl);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$get_kupon = json_decode(curl_exec($ch), true);
curl_close($ch);
$thirdUrl = "https://teleport.edadeal.ru/wallet/v2/campaigns/{$slug}/code";
$ch = curl_init($thirdUrl);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
// curl_setopt($ch, CURLOPT_POST, true);
// curl_setopt($ch, CURLOPT_POSTFIELDS, '');
$get_promocode = json_decode(curl_exec($ch), true);
curl_close($ch);
print_r($get_promocode);
if (!isset($get_promocode['items']) and !isset($get_promocode['items'][0]['params']['value'])) {
continue;
}
$brand_name = mb_convert_case($get_kupon['partner']['name'], MB_CASE_TITLE, "UTF-8");
$logo_img = $get_kupon['partner']['imageUrl'];
$category = $get_kupon['partner']['type'];
$title = $get_kupon['title'];
$start_promo = date("d.m.Y", $get_kupon['dateStart'] / 1000);
$end_promo = date("d.m.Y", $get_kupon['dateEnd'] / 1000);
$seo_title = transliterate($title);
$seo_brand = transliterate($brand_name);
$promocode = $get_promocode['items'][0]['params']['value'];
echo "
Бренд: ".$brand_name."
Лого: ".$logo_img."
Категория: ".$category."
Название купона: ".$title."
Начало промо: ".$start_promo."
Конец промо: ".$end_promo."
Промокод: ".$promocode."
";
echo "
Seo Title: ".$seo_title."
Brand Title: ".$seo_brand."
";
}
}
}
Запрос на получение промокда (нажатие на кнопку "Показать промокод") идёт методом POST без параметров и выглядит так:
Отправляя POST запрос с $headers которые выше, я получаю пустоту или ошибку 401, когда как. Не пойму почему. Подскажите пожалуйста, как правильно передавать данные, чтобы получить положительный ответ от сервера
Если зайти с браузера и запросить промокод через браузера, а потом отправить запрос (на скрине) методом GET сюда
https://teleport.edadeal.ru/wallet/v2/campaigns/sk... то я получаю JSON вместе с промокодом, если я до этого не запрашивал с браузера промокод, то после отправки GET запроса я получаю положительный ответ от сервера, но там не будет данных о промокоде.