Bontiv-Sourceer source code viewer
Root | Help
./web-crawler/src/http.c
#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;

}
Presented with Bontiv-Sourceer