При парсинге скрипт отдает 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+ товаров.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab