11 апреля 2014

Использование libcurl в QT Creator

"Это не больно! " - говорили они.
"Давай прыгай!" - говорили они!
© Народная шутка

Пару слов о том, почему и для чего это статья. Решил заняться Linux вплотную: поставить, настроить, поработать, написать пару программ... Естественно всё это в виртуальной машине, хотя меня это не смущает. С первыми тремя пунктами особых проблем не возникло, но вот "написать пару программ" оказалось не так тривиально, как  я рассчитывал. Бесспорно Linux очень удобен для продвинутого человека, поскольку позволяет полностью настроить систему "под себя", но новичку не справиться без посторонней помощи.

Теперь к делу! Я поставил Debian stable-ветку. Решил попрактиковаться, поэтому установил в минимальной комплектации, а графику и прочее доставил руками (пишу об этом, потому что, возможно, в этом крылась часть моих проблем). Далее поставил из репозитория QT Creator. Он оказался довольно удобным, о чем можете прочитать на разных сайтах, а также посмотреть разные видео уроки. Следующим моим желанием было попробовать написать "что-то сетевое". Просто проверить "как оно тут всё работает". Выбор пал на libcurl. Сложности у меня, как у начинающего пользователя Linux, возникли незамедлительно: дело в том, что в системе есть предустановленный пакет libcurl, но я хотел скачать и поставить самый последний. Установил я его через aptitude install libcurl4-nss-dev, но оказалось что есть проблемы совместимости со старыми версиями!

1) Перед тем как установить что-то новое выполняем aptitude (без параметров) и в открывшемся интерфейсе находим нужный пакет, а потом ОБЯЗАТЕЛЬНО проверяем с чем он будет конфликтовать.

После этого я попробовал создать новый проект в QT Creator и прописать #include <curl/curl.h>.
В следствие того, что я всегда писал программы под Windows, я бы уверен, что всё заработает, но я ошибся. И правильно, что ошибся, ведь компилятор понятия не имеет где и что ему подключать. Вот тут у меня возникла реальная проблема: всё что я находил в интернете было для windows и  я не понимал как оно работает. Позже я сам создал вопрос на stackoverflow и добрые люди разъяснили мне механизм добавления новых библиотек в QT Creator.

2) Чтобы использовать новую библиотеку в QT Creator необходимо открыть файл проекта name.pro и в нем добавить строчку LIBS += -lcurl. В том случае, если это не сработает, или вы хотите подключить какую-нибудь другую библиотеку, то можете использовать вот такие строчки: CONFIG += link_pkgconfig PKGCONFIG += curl.

Во втором случае используется приложение pkg-config. Это такой пакет, который знает об остальных пакетах в системе и нужен для того, чтобы сообщать о них компилятору. Здесь мы указываем использовать его, а потом в личной опции PKGCONFIG указываем какую библиотеку мы хотим подключить.

Всё скомпилировалось, запустилось и заработало. Я начал пробовать примеры с официального сайта. Тоже всё в порядке. Теперь возникла надобность обрабатывать входящий HTTP HEADER ответа. Чуть чуть покопавшись в документации обнаружил прорву функций, предназначенных для этого. Далее попытался реализовать, но эти функции пишут в файл по переданному дескриптору, а я же хотел просто менять значение переменной. Для этого есть прекрасный вариант использовать объект типа stringstream. Передавая указатель на него в качестве параметра, мы преобразуем его из типа void (который указан в параметре) в тип stringstream и дальше используем как обычно. После выхода из функции переменная этого типа будет содержать весь HTTP HEADER, который в последствии можно использовать где вздумается.

Вот такой маленький опыт я получил при работе в новой операционной системе с новой IDE. Надеюсь эта информация окажется нужной таким же новичкам как и я.