Использование curl и с++ [часть 1]

Февраль 27th, 2011 § 4 comments

Давно работаю с либой, но все еще есть чему по учится, хотел бы систематизировать свои знания и в том числе поделится ими. На просторах рунета примеров не очень то много, если конечно не брать php+libcurl их то завались, но щас речь не о PHP. Первое что нам нужно это собственно подключить либу к нашему проекту для этого нам нужны dll’ки, header’ы и lib файл вот тут архивчик на момент написания он был последним. Собираем мы все под Visual Studio под Builder его тоже собрать можно (здесь идет много ругательств), но при статической сборке lib файл нужно будет обработать 2 тулзами они идут в поставки Builder’а, как будет возможность я припишу в конце статейки что и в какой последовательности делать с богопротивным Builder’ом для работы libcurl на нем (опять же напомню что я говрю о статической линковке, никто не отменял динамический подгурз либы).

Вообшем начнем, первым делом закидываем файл с либой в корень проекта или куда вам угодно, щелкаем добавить файл в проект. Дальше закидываем файлы заголовков в удобное для нас место и их так же подцепляем через include я предпочел закинуть их сразу в includ’ы в VC что бы без лишней мороки, если будете делать несколько проектов с использованием этой либы т.е папка где установлена Visual Studio\VC\include\ тут создаем папку curl и закидываем туда header’ы.

подключаются они так


#include <curl\curl.h>

Не будем заострять на этом внимание это все мелочи, но пару ремарков для очень начинающих.


#include <curl\curl.h>

#include "curl\curl.h"

эти два варианта отличаются тем что в первом случае заголовки будут искаться в инклудах самой VS, а во втором они будут искаться в корне вашего проекта, разумеется если вы сохранили дефолтные настройки и ни чего не меняли. Второй момент, опять же если вы ничего не менял то при запуске ваших проектов в VS корневой папкой считается та папка где лежат исходники, не забывайте об этом, т.к. это частая проблема очень начинающих когда они грузят что-то извне положив файлы в паку Debug или Release, а при запуске в VS они разумеется не обнаруживаются. Наверное эти советы стоит вынести в отдельную тему, а то мы отвлеклись. Дальше материал будет по суше без всяких вольностей.

Вообщем к этому моменту мы уже все подключили. идем далее и создадим свою первую программку используя libcurl. Одна из самых важных функций это функция для чтения данных, она же callback function


static size_t Writer(char *buffer, size_t size, size_t nmemb, std::string *html){
 int result = 0;

 if(buffer != NULL){
 html->append(buffer, size*nmemb);
 result = size*nmemb;
 }
 return result;

}

Сразу замечу что с бинарными данными так же работает прекрасно (Builder’овский String это не умеет, не знаю как там с stl реализацией).

Далее основной код:


#include <string>
#include <curl\curl.h>
#include <iostream>

using namespace std;

static size_t Writer(char *buffer, size_t size, size_t nmemb, std::string *html){
 int result = 0;

 if(buffer != NULL){
 html->append(buffer, size*nmemb);
 result = size*nmemb;
 }
 return result;
}

int main()
{
 CURL *curl;
 string data;
 curl_global_init(CURL_GLOBAL_ALL);
 curl=curl_easy_init();
 curl_easy_setopt(curl,CURLOPT_URL,"http://redgears.ru");
 curl_easy_setopt(curl,CURLOPT_WRITEFUNCTION,Writer);
 curl_easy_setopt(curl,CURLOPT_WRITEDATA,&data);
 curl_easy_perform(curl);
 cout<<data<<endl;
 curl_easy_cleanup(curl);
 getchar();
 return 0;
}

Продолжение следует…

§ 4 Responses to Использование curl и с++ [часть 1]"

  • KaLaSh пишет:

    А где можно найти описание функций curl под С++ на русском языке?

    • admin пишет:

      http://curl.haxx.se/libcurl/ это сайт разработчика, здесь можно найти все что нужно. Для каждого языка (правая колонка), есть свои реализации. На русском полного руководства не встречал за исключением вот этой статьи

  • zzz пишет:

    можно подробнее о статической линковке для C++ Builder ?
    заранее спасибо.

    • admin пишет:

      В общем в статической линковке для Builder’а нет ничего сложного, только нужно не забывать о том что Builder использует свое специфичное соглашение об именовании функций, об этом хорошо написано тут. Далее что бы создать lib файл из dll собранной VC используем implib. Гугли в сторону implib, coff2omf и все будет окей. Ну и не забывай подключать саму либу
      #pragma comment(lib,”somelib.lib”)
      если не ошибаюсь в Builder’е таким образом это делается.

Оставить комментарий

Ваш email не будет опубликован. Обязательные поля отмечены *

Вы можете использовать это HTMLтеги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Смотреть фильмы онлайн