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

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

Moderator: Gen1us2k

Post Reply
User avatar
Gen1us2k
Модератор
Модератор
Posts: 771
Joined: 02 Mar 2010, 16:13

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

Post by Gen1us2k » 04 Mar 2010, 17:31

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

Установка


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

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

Code: Select all

$ 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
Теперь собираем

Code: Select all

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

Code: Select all

$ ./configure --prefix=/path/to/install/

Code: Select all

$ make
$ sudo make install
Всё. libcurl установлен.

Теперь приступаем к установке curlpp.
Качаем последнюю версию:

Code: Select all

$ 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
Собираем…

Code: Select all

$ ./configure
$ make
$ sudo make install
Есть. curlpp также установлен.
Теперь можно приступать непосредственно к программированию


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

Компиляция


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

Code: Select all

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

Code: Select all

$ curlpp-config --libs
Список флагов для линковщика

Соответственно, для компиляции файла somefile.cpp нужно дать такую команду:

Code: Select all

$ g++ somefile.cpp `curlpp-config --cflags` `curlpp-config --libs`
Практика


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

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

Code: Select all

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

Code: Select all

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

Code: Select all

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

Code: Select all

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

Code: Select all

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

Code: Select all

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

Code: Select all

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

Code: Select all

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

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

Code: Select all

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

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

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

Code: Select all

$ g++ test.cpp `curlpp-config --cflags` `curlpp-config --libs`
В скачаном архиве curlpp есть папка examples. В ней еще достаточно много разных примеров использования библиотеки.

(c) хабрахабр
Image
Home: Windows Heaven
Home: Debian 6
For Servers: Debian || RHEL Based || Gentoo || FreeBSD
Post Reply

Return to “Компилируемые языки программирования”