Специализируюсь на 1С-Битрикс. Ваш вопрос — написание PHP-скрипта для парсинга страниц сайта на Битрикс с авторизацией — относится к платформе. Разберу возможные решения.
Способы авторизации в 1С-Битрикс для парсинга
Есть несколько подходов в зависимости от того, какой тип пользователя вам нужен (администратор или обычный пользователь) и где выполняется скрипт (на самом сервере или удалённо).
1. Если скрипт выполняется на том же сервере (на сервере Битрикс)
Лучший способ — авторизация через ядро Битрикс с помощью CHTTPRequest или CUser::Login:
<?php
// Подключаем ядро Битрикс
require_once($_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/main/include/prolog_before.php');
use Bitrix\Main\Context;
use Bitrix\Main\Authentication\Authentication;
use Bitrix\Main\UserTable;
// Вариант 1: Через CUser::Login
global $USER;
$authResult = $USER->Login('логин', 'пароль');
if ($authResult === true) {
echo "Авторизован как: " . $USER->GetLogin();
// Теперь можно парсить страницы
$html = file_get_contents('http://yoursite.ru/some-page/');
} else {
echo "Ошибка авторизации";
}
?>
Но важно: если скрипт запускается через CLI (консоль), сессия не создаётся автоматически. Для CLI нужно дополнительно:
<?php
$_SERVER["DOCUMENT_ROOT"] = realpath(__DIR__ . "/../.."); // подставьте свой путь
require_once($_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/main/include/prolog_before.php');
// Инициализация сессии для CLI
\Bitrix\Main\Application::getInstance()->initializeContext();
\Bitrix\Main\Loader::includeModule('main');
global $USER;
$USER->Authorize(1); // ID пользователя (например, 1 — администратор)
// или
$USER->Login('логин', 'пароль');
?>
2. Если скрипт выполняется удалённо (cURL — классический парсинг)
Используйте cURL с сохранением сессионной cookie. Битрикс использует стандартную PHP-сессию (обычно PHPSESSID).
<?php
$login = 'user@example.com';
$password = 'password';
$siteUrl = 'https://yoursite.ru';
$cookieFile = __DIR__ . '/cookie.txt';
// Шаг 1: Получаем страницу логина и CSRF-токен (если требуется)
$ch = curl_init($siteUrl . '/auth/');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_COOKIEJAR => $cookieFile,
CURLOPT_COOKIEFILE => $cookieFile,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_USERAGENT => 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36',
]);
$html = curl_exec($ch);
// Если в форме есть CSRF (sessid), извлекаем его
preg_match('/name="sessid" value="([^"]+)"/', $html, $matches);
$sessid = $matches[1] ?? '';
// Шаг 2: POST-запрос на авторизацию
$postData = [
'USER_LOGIN' => $login,
'USER_PASSWORD' => $password,
'AUTH_FORM' => 'Y',
'TYPE' => 'AUTH',
'sessid' => $sessid,
];
curl_setopt_array($ch, [
CURLOPT_URL => $siteUrl . '/auth/?login=yes',
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => http_build_query($postData),
]);
$result = curl_exec($ch);
// Проверяем, что авторизация прошла (нет формы логина на странице после редиректа)
if (strpos($result, 'AUTH_FORM') === false) {
// Шаг 3: Парсим нужные страницы
curl_setopt($ch, CURLOPT_URL, $siteUrl . '/some-protected-page/');
curl_setopt($ch, CURLOPT_POST, false);
$pageContent = curl_exec($ch);
echo $pageContent;
} else {
echo "Ошибка: Неверный логин/пароль";
}
curl_close($ch);
?>
3. Если на сайте включена двухфакторная аутентификация
Стандартный cURL не подойдёт — нужно либо отключать 2FA для тестового пользователя, либо использовать OAuth через REST API Битрикс.
4. Через REST API (рекомендуемый способ для парсинга)
Если это ваш сайт, проще и надёжнее создать веб-сервис с авторизацией по OAuth-токену:
<?php
// Получаем OAuth-токен через админку: Настройки → REST API
$token = 'your_oauth_token';
$siteUrl = 'https://yoursite.ru';
$ch = curl_init($siteUrl . '/rest/1/user.current.json');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $token],
CURLOPT_SSL_VERIFYPEER => false,
]);
$response = curl_exec($ch);
curl_close($ch);
// Если успешно — используйте REST-методы для получения данных
echo $response;
?>
REST API не требует сессий, cookie и поддерживает все CRUD-операции.
Важные нюансы 1С-Битрикс
- sessid — в Битрикс обязательная проверка CSRF-токена (
bitrix_sessid()). Без него POST-логин не сработает. - Cookie с доменом — убедитесь, что cookie записываются корректно. В Битрикс путь к cookie — обычно
/. - Капча — если на сайте включена капча при множественных неудачных попытках, cURL-метод не сработает.
- Тип авторизации — уточните URL логина. Стандартный:
/auth/?login=yes. В компонентеsystem.auth.form— поляUSER_LOGINиUSER_PASSWORD.
Что из этого подходит под ваш сценарий?
Уточните, пожалуйста:
- Скрипт выполняется на сервере Битрикс или удалённо (через HTTP)?
- Кого нужно авторизовать — администратора или обычного пользователя?
- Есть ли на сайте двухфакторная аутентификация или капча?
Это позволит дать точный рабочий пример под вашу конфигурацию.