Задать вопрос
@aopil

Почему не загружается страница через CURL?

При нормальной загрузке сайта в браузере - загружается страница без проблем.

Когда делаю cURL запрос, то bodyне получаю вообще, получаю только head, при этом страница обновляется автоматически, редиректов не нашел.

В браузере открыл инспектор, и нашел в head вот такую строчку:
<script type="text/javascript" async="" src="https://www.gstatic.com/recaptcha/releases/rCr6***********/recaptcha__ru.js" crossorigin="anonymous" integrity="sha384-uaB+28Q7G2Ccdbu4hmA0lq6Rp8c*******N0CUx+3B2UM"></script>


Получается это какая-то защита от cURL?) есть варианты исправить или искать проблему нужно в другом месте?
  • Вопрос задан
  • 590 просмотров
Подписаться 1 Простой 1 комментарий
Помогут разобраться в теме Все курсы
  • OTUS
    iOS Developer
    12 месяцев
    Далее
  • Stepik
    Парсинг на Python для начинающих
    2 недели
    Далее
  • AndroidSprint
    Попробуйте себя в роли разработчика за 10 дней
    1 неделя
    Далее
Решения вопроса 1
zkrvndm
@zkrvndm
Архитектор решений
Для того, чтобы не было проблем при загрузке ресурса имеет смысл имитировать реальный браузер. Делает это при помощи передачи тех же заголовков, что отправляет Google Chrome при запросе. Пример передачи заголовков:
<?php

// Указываем тип документа и кодировку:
header('Content-Type: text/html; charset=utf-8');

// Включаем отображение ошибок:

ini_set('error_reporting', E_ALL);
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);

// Адрес:
$url = 'https://ссылка_на_страницу';

// Создаём новый сеанс:
$curl = curl_init();

// Указываем адрес целевой страницы:
curl_setopt($curl, CURLOPT_URL, $url);

// О отключаем проверку SSL сертификата:
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);

// Устанавливаем заголовки для имитации браузера:

$headers = [];
$headers[] = 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9';
$headers[] = 'Accept-Encoding: identity';
$headers[] = 'Accept-Language: ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7';
$headers[] = 'Cache-Control: no-cache';
$headers[] = 'Connection: keep-alive';
$headers[] = 'Host: ' . parse_url($url)['host'];
$headers[] = 'Pragma: no-cache';
$headers[] = 'Sec-Fetch-Dest: document';
$headers[] = 'Sec-Fetch-Mode: navigate';
$headers[] = 'Sec-Fetch-Site: none';
$headers[] = 'Sec-Fetch-User: ?1';
$headers[] = 'Upgrade-Insecure-Requests: 1';
$headers[] = 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.193 Safari/537.36';


curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);

// Разрешаем переадресацию:
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);

// Запрещаем прямяой вывод результата запроса:
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);

// Делаем сам запрос:
$result = curl_exec($curl);

// Завершаем сеанс:
curl_close($curl);

// Смотрм результат:
echo $result;
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы