Добро пожаловать на форум, Гость!
Войдите или зарегистрируйтесь!
Имя пользователя:   Пароль:  
Запомнить меня 




Начать новую тему Ответить на тему   [ 1 сообщение ] 
Автор Сообщение
СообщениеДобавлено: 04 мар 2010, 17:31 
Модератор
Аватар пользователя
Статус: Не в сети

GeoIP: Kyrgyzstan

Сообщений: 803

Зарегистрирован: 02 мар 2010, 16:13
Благодарил (а): 6 раз.
Поблагодарили: 12 раз.
Эта статья — смесь переводов мануалов и статей по curl и curlpp. Будет полезна тем, кто хочет начать работу с библиотекой, но не знает откуда начать =).
А начнем мы, конечно же, с официального сайта. На нем написано, что cURLpp — библиотека-обертка для языка С++ на библиотеку curl — удобную утилиту и одноименную библиотеку для работы с сетью.

Установка


Перед тем как работать непосредственно с curlpp, нужно установить libcurl. В большинстве дистрибутивов она есть в репозитории, но все-таки предпочтительнее брать её из исходников — благо установка легкая, зато вы будете знать что конкретно вы ставить. Хотя это дело вкуса.

Для начала, желательно установить openssl. Без него будут недоступны функции с зашифрованным соединением.
Итак, сначала скачаем архив исходников с curl.haxx.se/download.html
На момент написания статьи это был curl-7.20.0.tar.gz
Код:
$ mkdir curl && cd curl
$ wget curl.haxx.se/download/curl-7.20.0.tar.gz
$ tar xfv curl-7.20.0.tar.gz
$ cd curl-7.20.0

Теперь собираем
Код:
$ ./configure

После конфигурации можно посмотреть куда make собирается его кидать. По умолчанию это /usr/local, если вас это не устраивает — при конфигурации укажите опцию --prefix=/path/to/install/
Код:
$ ./configure --prefix=/path/to/install/


Код:
$ make
$ sudo make install


Всё. libcurl установлен.

Теперь приступаем к установке curlpp.
Качаем последнюю версию:
Код:
$ wget curlpp.googlecode.com/files/curlpp-0.7.3.tar.gz
$ cd… && mkdir curlpp && cd curlpp
$ tar xfv curlpp-0.7.3.tar.gz
$ cd curlpp-0.7.3

Собираем…
Код:
$ ./configure
$ make
$ sudo make install

Есть. curlpp также установлен.
Теперь можно приступать непосредственно к программированию


Теория и практика

Компиляция


Для того чтобы упростить указание компилятору путь к библиотеке и заголовочным файлам, была создана утилита curlpp-config

Код:
$ curlpp-config --cflags

Показывает, какие флаги нужно указать для компилятора

Код:
$ curlpp-config --libs

Список флагов для линковщика

Соответственно, для компиляции файла somefile.cpp нужно дать такую команду:
Код:
$ g++ somefile.cpp `curlpp-config --cflags` `curlpp-config --libs`


Практика


Рассмотрим easy-интерфейс. Работа через него очень проста и удобна.

Для начала подключим заголовки
Синтаксис: [ Загрузить ] [ Скрыть ]
Используется подсветка синтаксиса c
#include <curlpp/cURLpp.hpp>
#include <curlpp/Easy.hpp>
#include <curlpp/Options.hpp>
Обработано за 0.002 секунд, используется GeSHi 1.0.8.4


и пропишем неймспейсы:
Синтаксис: [ Загрузить ] [ Скрыть ]
Используется подсветка синтаксиса c
using namespace cURLpp;
using namespace Options;
using namespace types;
using namespace std;
Обработано за 0.001 секунд, используется GeSHi 1.0.8.4


Объявим объект класса curlpp::Easy:
Синтаксис: [ Загрузить ] [ Скрыть ]
Используется подсветка синтаксиса c
curlpp::Easy request;
Обработано за 0.001 секунд, используется GeSHi 1.0.8.4


Чтобы связать объект с определенным адресом сначала устанавливаются опции:
Для начала нужно создать объект URL
Синтаксис: [ Загрузить ] [ Скрыть ]
Используется подсветка синтаксиса c
curlpp::options::Url uHabr(std::string(«m.habrahabr.ru»));
Обработано за 0.002 секунд, используется GeSHi 1.0.8.4

И задаем его для нашего запроса
Синтаксис: [ Загрузить ] [ Скрыть ]
Используется подсветка синтаксиса c
request.setOpt(uHabr);
Обработано за 0.001 секунд, используется GeSHi 1.0.8.4


Можно эти две строки объеденить:
Синтаксис: [ Загрузить ] [ Скрыть ]
Используется подсветка синтаксиса c
request.setOpt( Url(«m.habrahabr.ru») );
request.setOpt( UserAgent(«Curl-Testing Agent») );
Обработано за 0.001 секунд, используется GeSHi 1.0.8.4


Для того, чтобы результат запроса получить, например, в виде строки, нужно реализовать функтор size_t WriteMemoryCallback(char* ptr, size_t size, size_t nmemb):
Синтаксис: [ Загрузить ] [ Скрыть ]
Используется подсветка синтаксиса c
std::string RequestAnswer;

size_t WriteStringCallback(char* ptr, size_t size, size_t nmemb)
{
size_t realsize = size * nmemb;
RequestAnswer.append(ptr,realsize);

return realsize;
}
Обработано за 0.002 секунд, используется GeSHi 1.0.8.4


И добавить его в опции:
Синтаксис: [ Загрузить ] [ Скрыть ]
Используется подсветка синтаксиса c
WriteFunctionFunctor functor(WriteMemoryCallback);
WriteFunction* cb = new curlpp::options::WriteFunction(functor);
request.setOpt(cb);
Обработано за 0.001 секунд, используется GeSHi 1.0.8.4

Также доступны и другие опции.

Выполняем perform — все указанные опции будут применены.
Синтаксис: [ Загрузить ] [ Скрыть ]
Используется подсветка синтаксиса c
request.perform();
Обработано за 0.001 секунд, используется GeSHi 1.0.8.4

Внимание! Если не указать функтор, результат идет на стандартный вывод.

Поздравляю! Мы написали программу, которая скачивает данные по указаному адресу!

Компилировать его нужно просто коммандой

Код:
$ g++ test.cpp `curlpp-config --cflags` `curlpp-config --libs`


В скачаном архиве curlpp есть папка examples. В ней еще достаточно много разных примеров использования библиотеки.

(c) хабрахабр


Изображение

Home: Windows Heaven
Home: Debian 6
For Servers: Debian || RHEL Based || Gentoo || FreeBSD


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ 1 сообщение ] 
   Похожие темы   Автор   Ответов   Просмотров   Последнее сообщение 
Перенесенная ^_^

в форуме Linux

root

3

38

02 мар 2010, 16:15

Gen1us2k Перейти к последнему сообщению

Перенесенная Документация по Gentoo

в форуме Linux

Gen1us2k

0

4

05 мар 2010, 18:54

Gen1us2k Перейти к последнему сообщению



Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Собрано Raven. Русская поддержка phpBB
phpBB SEO