Класс-обертка для curl — s_http
Было время, когда я пытался написать серию статей о библиотеке 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
Класс на протяжении года развивался, потому если будут обновления, буду писать отдельные новости.
——–
Выгодные ипотечные кредиты. Налетай.
Благоприятный климат в болгарии для Вас и Нас.
Дешевые стрижки спб под ноль.


Есть ещё Curl library for CodeIgniter.
Как вариант – да. Но я к своей привык уже
Отличная обёртка. Всё удобно и понятно, в стиле Евгения
Один маленький вопрос… Как указать referer?
Тоже делал обёрку для CURL в виде класса, так что будет очень интересно посмотреть разработки других программистов =)
Женя, как передать русские символы? Вместо них печатается какая-то хрень
спасибо за класс, не использовал еще но скачал. Попробую на его фоне писать парсеры.
Похоже в классе ошибка, метод ‘post’, не проверяется ‘post_data’
if( empty($this->url) ){
$this->error = ‘Не указан URL либо POST DATA’;
return false;
}