(обновлено) 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

  }

}

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