- Библиотека
- Уроки парсинга для начинающих
- Подключение к удаленному серверу
(обновлено) 2012-01-06
Подключение к удаленному серверу
2 способа отправки get запросов
В php существует большое разнообразие доступных методов отправки запросов к удаленному серверу. Мы рассмотрим лишь 2 из них, т.к. их достаточно в 95% случаев.
PHP get запрос с помощью file_get_contents
file_get_contents( string filename [, bool use_include_path [, resource context [, int offset [, int maxlen]]]] )
Данная функция позволяет получить ответ сервера в виде строки. Сегодня мы не будем обращать внимания на необязательные параметры. Таким образом, для простой отправки запроса достаточно написать:
$url = ‘необходимый урл’;
$res = file_get_contents($url);
Вторым методом отправки get запроса, который мы рассмотрим, является использование php библиотеки curl.
Get запрос с помощью curl
В данном случае код будет более громоздок, но в будущем, использование curl даст нам большие возможности.
Работа с curl состоит из 4х основных действий:
- Инициализация - $ch = curl_init($url);
- Установка параметров curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); (данный параметр говорит о необходимости вернуть страницу). Сам синтаксис ясен: идентификатор, имя опции, значение.
- Выполнение запроса $res = curl_exec( $ch );
- Закрытие curl_close( $ch );
Таким образом в обоих случаях мы отправим GET запрос и переменная $res будет содержать строку с содержимым ответа.
Пример отправки get запроса. Проверка доступности виде ВКонтакте.
Скрипт примера является упрощенной версией скрипта, который выполняет проверку доступности всех видео из контакта, размещенных на страницах онлайн-кинотеатра. Для простоты здесь приведено 2 ссылки, которые загружают контактовский плеер в iframe. Одно из видео недоступно, другое доступно. Обе страницы возвращают в заголовках ответа 200 код (страница успешно загружена), однако по плохой ссылке мы видим вместо плеера надпись «это видео изъято из публичного просмотра». Для проверки отсутствия видео производится максимально простая операция — мы смотрим длину строки ответа и короткие строки отправляем в ошибку. Страницы с нормально функционирующим плеером имеют большую длину, чем ошибочные из-за обилия кода.
Для примера первая страница загружается функцией file_get_contents, а вторая с помощью curl. Все пояснения выполнены непосредственно в комментариях к коду
<?php
//Ссылка на доступное видео
$goodurl = 'http://vkontakte.ru/video_ext.php?oid=-15879660&id=160859706&hash=e26107e4fff0cb5a&hd=1';
//Ссылка на недоступное видео
$badurl = 'http://vkontakte.ru/video_ext.php?oid=105722022&id=160682262&hash=0dc86a2ede9aa046&hd=1';
//Получение содержимого в строку
$out[] = file_get_contents($goodurl);
/*------------Получение содержимого в строку, используя CURL-------------------*/
/* создание нового ресурса cURL*/
$ch = curl_init();
// установка URL
curl_setopt($ch, CURLOPT_URL, $badurl);
/* результат в строку (при false результат выводится в браузер)*/
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// выполняем запрос
$out[] = curl_exec($ch);
// закрытие ресурса curl
curl_close($ch);
/* ------------Вывод результатов-----------------------------*/
$i = 0;
foreach($out as $item){
$i++;
if (strlen($item)<2000){
?>
<p>Видео <?php echo $i; ?> не доступно</p>
<?php
}
else{
?>
<p>Видео <?php echo $i; ?> доступно</p>
<?php
}
}
Первый урок получился небольшим, дальше будет интереснее, ведь парсеры могут многое: помогать в составлении семантического ядра, наполнять сайты копипастом, производить анализ статистических данных по огромной выборке сайтов и многое другое.