Проблема с CURL получением содержимого

189
28 апреля 2022, 23:30

Не могу CURL'ом получить содержимое страницы с сайта kaspi.kz Пример кода:

$url = 'https://kaspi.kz/shop/p/apple-iphone-11-128gb-chernyi-1005116/?at=1&c=750000000';
        $ch = curl_init($url);
        $headers = array(
            'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
            'Accept-Language: en-US,en;q=0.5',
            'Accept-Encoding: gzip, deflate',
            'Connection: keep-alive',
            'Upgrade-Insecure-Requests: 1'
        );
        $config['useragent'] = 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.0';
        curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
        curl_setopt($ch, CURLOPT_COOKIEFILE, '/backend/web/cook');
        curl_setopt($ch, CURLOPT_COOKIEJAR, '/backend/web/cook');
        curl_setopt($ch, CURLOPT_USERAGENT, $config['useragent']);
        curl_setopt($ch, CURLOPT_ENCODING, 'gzip, deflate');
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
        curl_setopt($ch, CURLOPT_REFERER, 'https://kaspi.kz');
        $content = curl_exec($ch);
        curl_close($ch);

В ответ получаю вот такой код:

<html>
   <head>
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <style>
         @keyframes animate{0%{transform:rotate(180deg)} 
         to{transform:rotate(540deg)} 
         } 
         html{color:#4a4a4a;background:#f0f0f0;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;font-family:sans-serif} 
         body{min-width:100vw;font-family:"Roboto",Helvetica,Arial,sans-serif} 
         .spinner{border-radius:100%;background:#fff;position:absolute;left:0;top:0;bottom:0;right:0;margin:auto} 
         .spinner__shadow{position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,.15);z-index:999;display:flex} 
         .spinner:after,.spinner:before,.spinner_inner:after,.spinner_inner:before{position:absolute;display:block;content:"";border-left-color:#fff!important;transform:rotate(180deg);animation:animate 1.8s ease infinite} 
         .spinner{box-shadow:0 0 0 15px #fff;width:140px;height:140px;border:3px solid #f14635} 
         .spinner:after,.spinner:before{border-radius:74px 0 0 74px;transform-origin:74px 74px;top:-5px;left:-5px;border-top:74px solid transparent;border-left:74px solid gray;border-bottom:74px solid transparent} 
         .spinner:before{animation-delay:-.6s} 
         .spinner:after{animation-delay:-.4s} 
         .spinner_inner{display:none} 
         *,:after,:before{box-sizing:border-box;-webkit-tap-highlight-color:transparent;outline:0} 
      </style>
   </head>
   <body>
      <div class="spinner__shadow"><div class="spinner _small"><div class="spinner_inner"></div></div></div>
      <script type="text/javascript"src="/yml/aes.min.js"></script>
      <script>
      var LINK = "http://kaspi.kz/shop/p/apple-iphone-11-128gb-chernyi-1005116/?at=2&c=750000000".replace(new RegExp("^http://", "i"), "https://");
            var urlParams = window.URLSearchParams && new URLSearchParams(window.location.search) || {};
            var at = urlParams.get("at") || 0; at = parseInt(at, 10);
            function toNumbers(d) { var e = []; d.replace(/(..)/g, function (d) { e.push(parseInt(d, 16)) } ); return e;}
            function toHex() {for (var d = [], d = 1 == arguments.length && arguments[0].constructor == Array ? arguments[0] : arguments, e = "", f = 0; f < d.length; f++)e += (16 > d[f] ? "0" : "") + d[f].toString(16); return e.toLowerCase();}
            function entrance() {
              var form = document.createElement("form");
              form.action = "https://kaspi.kz/entrance";
              var content = "<input type=\"hidden\" name=\"action\" value=\"login\"/><input type=\"hidden\" name=\"returnUrl\" value=\""+LINK+"\"/>";
              form.insertAdjacentHTML("afterbegin", content);
              document.body.appendChild(form);
              form.submit();
            }
            var a = toNumbers("241da8ee35e750786163840090d7103e"), b = toNumbers("7a017212b141d0a61faadb62d3fec212"), c = toNumbers("a72661f848c241bcdd2a47088fffe662");
            window.goToURL = function(ticketTGT) {
              if (ticketTGT) document.cookie = "ticket=" + ticketTGT + "; path=/";
              document.location.href = LINK;
            }
            if (at && at > 1) {
              window.mobapp ? window.mobapp.authorize("goToURL") : entrance();
            } else {
              document.cookie = "ks.tck=" + toHex(slowAES.decrypt(c, 2, a, b)) + "; max-age=3600; path=/shop";
              goToURL();
            } 
      </script>
   </body>
</html>
Другие страницы парсятся нормально, видимо стоит какая-то защита или Я делаю что-то неправильно. Кто сталкивался с подобным?

Answer 1

А что вы хотели получить? содержимое страницы? так вы получили, с curl все хорошо. Если посмотрите на скрипт, то можете увидеть, функцию

window.goToURL = function(ticketTGT) {
    if (ticketTGT) document.cookie = "ticket=" + ticketTGT + "; path=/";
    document.location.href = LINK;
}

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

READ ALSO
Поиск по JSON | MySql

Поиск по JSON | MySql

Есть json столбец

130
не выводит русский в консоль windows

не выводит русский в консоль windows

В один момент сломался вывод русского теста в консольИ внутри IDE (встроенных терминалах) и в cmd консоли я так и не понял что произошло

224
Ошибка при попытке масштабирвоания изображения picturebox

Ошибка при попытке масштабирвоания изображения picturebox

Пытаюсь сделать масштабирование pictureboxЧестно говоря, в c# я очень слаб

151
Переопределение времени при переносе данных в DataGridView

Переопределение времени при переносе данных в DataGridView

После обработки одной из таблиц DGVW1 данные (например) перетекают в DGVW3 и в момент, когда это происходит в ячейку записывается время (код прилагается)Нужно...

138