curl отдает 403 Forbidden

104
04 апреля 2021, 21:20

При парсинге скрипт отдает 403 ошибку, как я понимаю сервер понимает, что к нему пытается зайти скрипт и просто блокирует заход, при заходе через браузер ссылка открывается, через скрипт 403 ошибка

Сам скрипт

function getPage($arParams = [])
{
    if ($arParams) {
        if (!empty($arParams["url"])) {
            $sUrl = $arParams["url"];
            $sUserAgent = !empty($arParams["useragent"]) ? $arParams["useragent"] : "Mozilla/5.0 (Windows NT 6.3; W…) Gecko/20100101 Firefox/57.0";
            $iTimeout = !empty($arParams["timeout"]) ? $arParams["timeout"] : 5;
            $iConnectTimeout = !empty($arParams["connecttimeout"]) ? $arParams["connecttimeout"] : 5;
            $bHead = !empty($arParams["head"]) ? $arParams["head"] : false;
            $sCookieFile = !empty($arParams["cookie"]["file"]) ? $arParams["cookie"]["file"] : false;
            $bCookieSession = !empty($arParams["cookie"]["session"]) ? $arParams["cookie"]["session"] : false;
            $sProxyIp = !empty($arParams["proxy"]["ip"]) ? $arParams["proxy"]["ip"] : false;
            $iProxyPort = !empty($arParams["proxy"]["port"]) ? $arParams["proxy"]["port"] : false;
            $sProxyType = !empty($arParams["proxy"]["type"]) ? $arParams["proxy"]["type"] : false;
            $arHeaders = !empty($arParams["headers"]) ? $arParams["headers"] : false;
            $sPost = !empty($arParams["post"]) ? $arParams["post"] : false;
            if ($sCookieFile) {
                file_put_contents(__DIR__ . "/" . $sCookieFile, "");
            }
            $rCh = curl_init();
            curl_setopt($rCh, CURLOPT_URL, $sUrl);
            curl_setopt($rCh, CURLOPT_RETURNTRANSFER, true);
            curl_setopt($rCh, CURLOPT_FOLLOWLOCATION, true);
            curl_setopt($rCh, CURLOPT_USERAGENT, $sUserAgent);
            curl_setopt($rCh, CURLOPT_TIMEOUT, $iTimeout);
            curl_setopt($rCh, CURLOPT_CONNECTTIMEOUT, $iConnectTimeout);
            curl_setopt($rCh,CURLOPT_ENCODING,'gzip,deflate');
            if ($bHead) {
                curl_setopt($rCh, CURLOPT_HEADER, true);
                curl_setopt($rCh, CURLOPT_NOBODY, true);
            }
            if (strpos($sUrl, "https") !== false) {
                curl_setopt($rCh, CURLOPT_SSL_VERIFYHOST, true);
                curl_setopt($rCh, CURLOPT_SSL_VERIFYPEER, true);
            }
            if ($sCookieFile) {
                curl_setopt($rCh, CURLOPT_COOKIEJAR, __DIR__ . "/" . $sCookieFile);
                curl_setopt($rCh, CURLOPT_COOKIEFILE, __DIR__ . "/" . $sCookieFile);
                if ($bCookieSession) {
                    curl_setopt($rCh, CURLOPT_COOKIESESSION, true);
                }
            }
            if ($sProxyIp && $iProxyPort && $sProxyType) {
                curl_setopt($rCh, CURLOPT_PROXY, $sProxyIp . ":" . $iProxyPort);
                curl_setopt($rCh, CURLOPT_PROXYTYPE, $sProxyType);
            }
            if ($arHeaders) {
                curl_setopt($rCh, CURLOPT_HTTPHEADER, $arHeaders);
            }
            if ($sPost) {
                curl_setopt($rCh, CURLOPT_POSTFIELDS, $sPost);
            }
            curl_setopt($rCh, CURLINFO_HEADER_OUT, true);
            $sContent = curl_exec($rCh);
            $arInfo = curl_getinfo($rCh);
            $arError = false;
            if ($sContent === false) {
                $arData = false;
                $arError["message"] = curl_error($rCh);
                $arError["code"] = self::$arErrorCodes[curl_errno($rCh)];
            } else {
                $arData["content"] = $sContent;
                $arData["info"] = $arInfo;
            }
            curl_close($rCh);
            return [
                "data" => $arData,
                "error" => $arError
            ];
        }
    }
    return false;
}
    $test = $pars->getPage([
        "url" => "http://site.ru", // string Ссылка на страницу
        "useragent" => "Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.1 Mobile/15E148 Safari/604.1", // string Содержимое заголовка "User-Agent: ", посылаемого в HTTP-запросе
        "timeout" => 15, // int Максимально позволенное количество секунд для выполнения CURL-функций
        "connecttimeout" => 15, // int Количество секунд ожидания при попытке соединения
        "head" => false, // bool Для вывода заголовков без тела документа
    ]);

Пробовал подставлял разные useragent, подключал прокси, везде возврат 403 ошибки, как с этим бороться, куда копать?

p.s Нужно спарсить сайт с конструктора, на нем нет доступа к БД или к файлам, этот сайт мой, хочу его перенести на другую платформу, этот конструктор не предусматривает экспорт товаров, категорий, по этому хочу все товары спарсить и перенести на новую платформу, в ручную не вариант, там 10000+ товаров.