Пишем программы с использованием cURLpp на C++

С/С++, Delphi, Pascal, Basic, FoxPro, Java и т.д.

Модератор: Gen1us2k

Ответить
Аватара пользователя
Gen1us2k
Модератор
Модератор
Сообщения: 771
Зарегистрирован: 02 мар 2010, 16:13

Пишем программы с использованием cURLpp на C++

Сообщение Gen1us2k » 04 мар 2010, 17:31

Эта статья — смесь переводов мануалов и статей по 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-интерфейс. Работа через него очень проста и удобна.

Для начала подключим заголовки

Код: Выделить всё

#include <curlpp/cURLpp.hpp>
#include <curlpp/Easy.hpp>
#include <curlpp/Options.hpp>
и пропишем неймспейсы:

Код: Выделить всё

using namespace cURLpp;
using namespace Options;
using namespace types;
using namespace std;
Объявим объект класса curlpp::Easy:

Код: Выделить всё

curlpp::Easy request;
Чтобы связать объект с определенным адресом сначала устанавливаются опции:
Для начала нужно создать объект URL

Код: Выделить всё

curlpp::options::Url uHabr(std::string(«m.habrahabr.ru»));
И задаем его для нашего запроса

Код: Выделить всё

request.setOpt(uHabr);
Можно эти две строки объеденить:

Код: Выделить всё

request.setOpt( Url(«m.habrahabr.ru») );
request.setOpt( UserAgent(«Curl-Testing Agent») );
Для того, чтобы результат запроса получить, например, в виде строки, нужно реализовать функтор size_t WriteMemoryCallback(char* ptr, size_t size, size_t nmemb):

Код: Выделить всё

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;
}
И добавить его в опции:

Код: Выделить всё

WriteFunctionFunctor functor(WriteMemoryCallback);
WriteFunction* cb = new curlpp::options::WriteFunction(functor);
request.setOpt(cb);
Также доступны и другие опции.

Выполняем perform — все указанные опции будут применены.

Код: Выделить всё

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

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

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

Код: Выделить всё

$ 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
Ответить

Вернуться в «Компилируемые языки программирования»