Partage
  • Partager sur Facebook
  • Partager sur Twitter

Voici comment installer libcurl et l'utiliser

(et installation générale d'une librairie sous CodeBlocks)

10 janvier 2011 à 2:24:36

Voici un pico-tuto qui vous expliquera comment lire le code source d'une page web, en C, avec la librairie libcurl, sous CodeBlocks avec Mingw. Le site et le tuto anglo de libcurl étant un joyeux bazar incompréhensible pour des débutants :p , et l'installation d'une librairie n'étant pas toujours aisée, j'ai fait ce pico-tuto pour les amis zéro! ;)


Installation de la libraire libcurl sous CodeBlock avec Mingw :

1°) Aller sur >> http://www.gknw.de/mirror/curl/win32/

2°) Télécharger >> curl-7.21.3-devel-mingw32.7z

3°) Copier le contenu du dossier bin dans >> C:\WINDOWS\system32
*si vous gardez votre ancien zlib1.dll (si vous l'aviez déjà) et que ça ne compile pas correctement, ben vous prendrez le nouveau! (moi j'ai gardé l'ancien)

4°) Copier le contenu du dossier include dans >> C:\Program Files\CodeBlocks\MinGW\include

5°) Copier le contenu du dossier lib dans >> C:\Program Files\CodeBlocks\MinGW\lib

6°) Dans CodeBlocks >>
>Projet >Build options >Linker settings >Add
Sélectionner(Ctrl enfoncé) les 13 .a de LC dans C:\Program Files\CodeBlocks\MinGW\lib
(moi je m'y suis retrouvé à l'aide des dates de modifications: c'est les 13 derniers normalement ;) )
*Cette dernière manip(#6) sera à refaire pour chaque nouveau projet CB (à moins que vous sauvegardier le template)... sinon aller plutôt à >Settings >Compiler and debugger >Linker settings >Add ... mais ça grossit d'un gros 6Mo( :-° ) les .exe pour les autres projets qui ne s'en servent pas... ou il suffit évidement de les enlever quand vous passerez à autre chose.

Vous êtes maintenant près à utiliser libcurl et devenir milliardaire en concurrençant FireFox, Crome et IE! :p:lol:



Cadeau >> Code exemple fonctionnel :

*Il y a un exemple qui fait à peu près la même chose sur le site officiel, mais elle ne fonctionne pas... (et elle est pas aussi claire que celle-ci :D )


//
// Copie du code source d'une page web dans une 
// chaîne, affichage brut, et sauvegarde dans un fichier
// 09012011 !(C) (Copy-left)
//
#include <stdlib.h>
#include <string.h>
#include <dir.h>
#include <curl/curl.h>
#include <curl/types.h>
#include <curl/easy.h>


//Structure recevant la sortie de LibCurl
struct BufferStruct
{
  char* buffer;
  size_t size;
};


//Met le contenu de la page web dans la struct
static size_t WriteMemoryCallback(void* ptr, size_t size, size_t nmemb, void* data)
{
  size_t realsize = size * nmemb;
  struct BufferStruct* mem = (struct BufferStruct*) data;
  mem->buffer = (char*)realloc(mem->buffer, mem->size + realsize + 1);

  if ( mem->buffer )
  {
    memcpy(&(mem->buffer[mem->size]), ptr, realsize );
    mem->size += realsize;
    mem->buffer[ mem->size ] = 0;
  }

  return realsize;
}


//Lecture de la page web
char* LectureWeb(char* AddURL)
{
  curl_global_init(CURL_GLOBAL_ALL);

  CURL *myHandle;
  CURLcode result;
  struct BufferStruct LectureLC;
  LectureLC.buffer = NULL;
  LectureLC.size = 0;

  myHandle = curl_easy_init();
  curl_easy_setopt(myHandle, CURLOPT_WRITEFUNCTION, WriteMemoryCallback);
  curl_easy_setopt(myHandle, CURLOPT_WRITEDATA, (void*)&LectureLC); 
  curl_easy_setopt(myHandle, CURLOPT_URL, AddURL);
  result = curl_easy_perform(myHandle);  //voir la doc pour une gestion minimal des erreurs 
  curl_easy_cleanup(myHandle);

  if(result!=0) LectureLC.size=1;
  char Chaine[LectureLC.size];
  strcpy(Chaine, LectureLC.buffer);  strcat(Chaine,"\0");
  if(LectureLC.buffer) free(LectureLC.buffer);

  return Chaine;
}


void SauvegarderFichier(char *Chaine, char *Chemin, char *NomFichier)
{
  chdir(Chemin);
  FILE* Flot = NULL;
  Flot = fopen(NomFichier, "wt");
  if(Flot!=NULL)
  {
    fputs(Chaine, Flot);
    fclose(Flot);
  }
}


int main(void)
{
  char AddURL[200];
  char Chaine[50000];  //À changer selon vos besoin


  strcpy(AddURL,"http://www.exemple.com\0");

  strcpy(Chaine, LectureWeb(AddURL));

  printf("Chaine = %s",Chaine);

  SauvegarderFichier(Chaine, "C:/", "Exemple.txt\0");


  return 0;
}


Voilà! Pour les autres fonctionnalités de libcurl c'est ici > http://curl.haxx.se/libcurl/c/

*Si j'ai écrit des conneries n'hésitez pas à le dire... même si mon truc fonctionne, je suis un programmeur amateur : je code, j'appuie sur F9 et j'espère! :p

  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
10 janvier 2011 à 2:49:15

// *Je ne suis responsable de rien : utilisation à vos risques uniquement.
Ah ? Pourquoi, que peut-il nous arriver ?
  • Partager sur Facebook
  • Partager sur Twitter
10 janvier 2011 à 10:03:19

@Aiabusa: Sa va pas bien d'aller déterrer la moitié des sujets sur cUrl rien que pour faire de la pub pour ton pseudo-tuto ?

Si on faisait tous ça on serrait pas rendu.
  • Partager sur Facebook
  • Partager sur Twitter

🍊 - Étudiant - Codeur en C | Zeste de Savoir apprenez avec une communauté | Articles  - ♡ Copying is an act of love.

10 janvier 2011 à 10:16:52

@Aiabusa

Au debut, je me dit que c'est vraiment une bonne initiative, que même si ton tuto semble assez maigre, en ayant des feedback tu pourra l'améliorer, étoffer pour ensuite en faire une référence.

Mais la réaction de @che m'a surpris, il est pas comme ca d'habitude.
Alors en allant voir la liste des réponse que tu as mise a l'heure actuel, on voit 17 intervention dans 17 topic different.

1 ici, et 16 pour faire de la pub pour ton tuto.C
Ce serai pas une mauvaise idée si TOUS ces topic ne datait pas d'il y a un ans minimum ! certaines date même de 2005 il me semble !

C'est pas la meilleur manière de faire de la pub, ni même d'être apprécier sur le SDZ !
Tu devrais mettre ton tuto dans ta bio ou tout autre espace t'étant dédié et mettre un lien vers cet espace a chaque fois que l'occasion se présente, et non chercher les occasion
  • Partager sur Facebook
  • Partager sur Twitter
10 janvier 2011 à 10:22:30

Citation : Geek0

// *Je ne suis responsable de rien : utilisation à vos risques uniquement.
Ah ? Pourquoi, que peut-il nous arriver ?



Un bel overflow :) .
  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
10 janvier 2011 à 13:02:44

Citation : Tosh

Citation : Geek0

// *Je ne suis responsable de rien : utilisation à vos risques uniquement.
Ah ? Pourquoi, que peut-il nous arriver ?



Un bel overflow :) .


Héhé.
Yep, fous ton tuto un peu mieux foutu dans ta bio, comme tout le monde :)
  • Partager sur Facebook
  • Partager sur Twitter
10 janvier 2011 à 17:43:59

Tout est dit, je ferme.

Merci de ne plus déterrer de topics inutilement à l'avenir.
  • Partager sur Facebook
  • Partager sur Twitter
Zeste de Savoir, le site qui en a dans le citron !