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 , 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 :
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!
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 )
//
// 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;
}
*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!
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.
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
🍊 - Étudiant - Codeur en C | Zeste de Savoir apprenez avec une communauté | Articles - ♡ Copying is an act of love.