#include "http.h" #include <stdio.h> size_t write_callback(char* buffer, size_t size, size_t nitems, http_page page) { char* newbuffer; size_t endsize; endsize = size * nitems; size = page->Size + endsize; if (page->Content == 0) { page->Content = malloc(size); } else { page->Content = realloc(page->Content, size); } //Ajout des données et enregistrement memcpy(page->Content + page->Size, buffer, size - page->Size); page->Size = size; return endsize; } http_page http_get(char* url) { CURL *curl; CURLcode res; http_page page; page = malloc(HTTP_PAGE_SZ); page->Content = 0; page->Size = 0; curl = curl_easy_init(); if(curl) { curl_easy_setopt(curl, CURLOPT_URL, url); curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1); curl_easy_setopt(curl, CURLOPT_WRITEDATA, page); curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_callback); //Execute request if (curl_easy_perform(curl)) { fputs("Erreur de chargement de la page.\n", stderr); page->Code = 500; curl_easy_cleanup(curl); return page; } curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &page->Code); curl_easy_getinfo(curl, CURLINFO_EFFECTIVE_URL, &page->url); curl_easy_getinfo(curl, CURLINFO_CONTENT_TYPE, &page->Type); /* always cleanup */ curl_easy_cleanup(curl); } else { fputs("Curl init failled", stderr); } return page; }