Артём Мáлков

cURL как альтернатива функции file_get_contents в PHP

25 авг3 комм

Функция file_get_contents в PHP, при следующем ее использовании:

<?php

	$get_page = file_get_contents('https://www.pandoge.com');

	echo $get_page;

?>

поможет вам получить информацию с указанного сайта или файла. При парсинге (получении) информации таким способом с других сайтов вы можете не получить желаемый результат ввиду фильтрации сомнительных запросов, ведь через file_get_contents вы не отдаете никаких внятных заголовков к обращаемому сервису.

Чтобы исправить это и получить нужную информацию, и существует cURL. Он умеет и отдавать заголовки (включая агент браузера), и переходить по возможным редиректам.

Чтобы не быть многословным – функция для получения данных выглядит так:

function file_get_contents_alt($url) {
	
	$ch = curl_init();

	curl_setopt($ch, CURLOPT_USERAGENT, filter_input(INPUT_SERVER, 'HTTP_USER_AGENT', FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_LOW));
	curl_setopt($ch, CURLOPT_AUTOREFERER, TRUE);
	curl_setopt($ch, CURLOPT_HEADER, 0);
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
	curl_setopt($ch, CURLOPT_URL, $url);
	curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);       

	$data = curl_exec($ch);

	curl_close($ch);

	return $data;

}

Ее вы вставляете сразу после <?php в вашем скрипте, а использование следующее:

echo file_get_contents_alt("https://www.pandoge.com");

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

Рекомендуем к просмотру
Информер общей мировой статистики заражений коронавирусом COVID-19 (2019-nCoV)
Модули и скрипты
Получаем статистику заражений коронавирусом COVID-19 (2019-nCoV) на PHP+API
Модули и скрипты
Как определить, что посетитель вашего сайта поисковый робот, а не человек на PHP?
Посты
3
комментария
Форма комментирования этого поста скрыта. Авторизуйтесь, чтобы расширить привилегии гостевого посещения и получить необходимую помощь от сообщества Pandoge.
    • 3
    2
      •  Пользователь
    4 авг в 22:55

    Спасибо, очень помогло! И сайт хороший)

    • 1
    1066
      •  Команда Pandoge
    4 авг в 22:31

    Рамиль Сафиуллин, для POST попробуйте добавить строки:

    curl_setopt($ch, CURLOPT_POST, 1);

    curl_setopt($ch, CURLOPT_POSTFIELDS, "post_one=value_1&post_two=value_2");

    "post_one=value_1&post_two=value_2" - переменные и их значения.

    Для настройки header, пробуйте нечто подобное:

    $headers = [

    'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',

    'Accept-Encoding: gzip, deflate',

    'Cache-Control: no-cache',

    'Content-Type: application/x-www-form-urlencoded; charset=utf-8',

    'Referer: https://www.pandoge.com',

    'User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:28.0) Gecko/20100101 Firefox/28.0',

    'X-MicrosoftAjax: Delta=true'

    ];

    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

    • 1
    2
      •  Пользователь
    4 авг в 22:03

    Как сюда приделать POST данные и header's ?

Подняться наверх
«Pandoge» - помощник вебмастера