Авг 30

Класс-обертка для curl — s_http

Рубрики: Php  Количество просмотров: 1,960

Было время, когда я пытался написать серию статей о библиотеке curl: раз, два, три, но бросил эту затею, не потому, что статьи были бесполезные, и их никто не читал, а потому, что сам я уже не пользуюсь функциями curl в чистом виде. А писать статьи о том, чем сам не пользуешся – бред.

Год назад я написал класс s_http (сокр. samborsky_http), который облегчил мою программистскую жизнь. Именно об этом классе я хотел бы поговорить. Создан он как раз на основе curl, а пользоваться им гораздо проще, чем работать с чистым curl api. Главное – для большинства задач он подходит.

Особенности:

  • Класс старается получить от сервера сжатые средствами gzip,deflate данные, если конечно сервер такое может. Нужно для экономии трафика.
  • Если класс в момент скачивания страницы получает 302 редирект, он переходит по нему.
  • По умолчанию User-Agent файрфоксовский, но вы можете сами его установить.
  • Все кукисы, полученные от вебсервера запоминаются. Очень удобно, если нужно парсить из-под логина.
  • Если пользователем изначально не задан Referer, то класс ставит в это поле предыдущую скачанную страницу, как это делают браузеры.

Подключение класса, инициализация.

Для последующих примеров, я этот код не пишу. Но важно понимать, что он обязателен.

		// Подключаем файл с классом
		include('s_http.php');

		// Создали класс
		$http = new s_http();

		// Инициализируем
		$http->init();

Пример I. Скачиваем главную страницу Яндекса.

Самый распространенный код. Просто скачиваем страницу.

		if( $http->get('http://www.yandex.ru/') ){

			// Все ок, выводим скачанную информацию
			echo $http->data();
		}
		else{

			// Покажем последнюю ошибку
			echo $http->error();
		}

Пример II. Отправляем POST запрос.

Отличный пример для сабмиттеров, или если вам нужно взять данные из-под логина (т.е. сначала войти в свой кабинет).

		if( $http->post('http://mail.ru','login=lexus&password=xxxxxx&submit=Вход') ){

			// Все ок, выводим скачанную информацию
			echo $http->data();
		}
		else{

			// Покажем последнюю ошибку
			echo $http->error();
		}

Пример III. Скачиваем страницу по https.

Если нужно скачать данные по https, то можно воспользоваться этим кодом. Правда, если вам нужно для авторизации отправлять свой сертификат, то код этот не годится, потому что внутри него отключается проверка сертификата. Но для большинства случаев  метод https_get вас устроит.

		if( $http->https_get('https://light.webmoney.ru/login.aspx?l=ru') ){

			// Все ок, выводим скачанную информацию
			echo $http->data();
		}
		else{

			// Покажем последнюю ошибку
			echo $http->error();
		}

Пример IV. CodeIgniter

Любителям фреймворка CodeIgniter тоже подойдет этот класс. Поместите его в папку /system/application/libraries/, а затем в коде, например в модели:

		$this->load->library('s_http');
		$this->s_http->init();

		if( $this->s_http->get('http://www.samborsky.com/') ){
			echo $this->s_http->data();
		}
		else{
			echo $this->s_http->error();
		}

s_http

Загрузок: 474 | Размер: 1.5 KiB

Класс на протяжении года развивался, потому если будут обновления, буду писать отдельные новости.

——–
Выгодные ипотечные кредиты. Налетай.
Благоприятный климат в болгарии для Вас и Нас.
Дешевые стрижки спб под ноль.

Другие статьи автора

Комментарии

  1. Цитировать Samborsky

    Как вариант – да. Но я к своей привык уже

  2. Цитировать Удивленный

    Отличная обёртка. Всё удобно и понятно, в стиле Евгения :)

  3. Цитировать barmen

    Один маленький вопрос… Как указать referer?

  4. Цитировать Holy Diver

    Тоже делал обёрку для CURL в виде класса, так что будет очень интересно посмотреть разработки других программистов =)

  5. Цитировать Вадим

    Женя, как передать русские символы? Вместо них печатается какая-то хрень

  6. Цитировать iron-viper

    спасибо за класс, не использовал еще но скачал. Попробую на его фоне писать парсеры.

  7. Цитировать Arreay

    Похоже в классе ошибка, метод ‘post’, не проверяется ‘post_data’
    if( empty($this->url) ){
    $this->error = ‘Не указан URL либо POST DATA’;
    return false;
    }

Добавить комментарий