#include "basiccurl.h" CURL_LOAD_DATA *grab_http_response(const char *url) { CURL_LOAD_DATA *data; CURL *curl = curl_easy_init(); if(curl) { data = do_grab(curl,url); curl_easy_cleanup(curl); return data; } return NULL; } CURL_LOAD_DATA *do_grab(CURL *curl,const char *url) { CURLcode res; CURL_LOAD_DATA *data = (CURL_LOAD_DATA *)malloc(sizeof(CURL_LOAD_DATA)); data->data = NULL; data->nbytes = 0; curl_easy_setopt(curl,CURLOPT_URL,url); curl_easy_setopt(curl,CURLOPT_WRITEFUNCTION,response_callback); curl_easy_setopt(curl,CURLOPT_WRITEDATA,data); res=curl_easy_perform(curl); return data; } size_t response_callback(void *ptr,size_t size,size_t nmemb, void *d) { size_t rsize=size*nmemb; CURL_LOAD_DATA *data=(CURL_LOAD_DATA *)d; // fprintf(stderr,"rsize is %d\n", rsize); data->data=(char *)realloc(data->data,(data->nbytes+rsize) *sizeof(char)); memcpy(&(data->data[data->nbytes]),ptr,rsize); data->nbytes += rsize; // fprintf(stderr,"data->nbytes is %d\n", data->nbytes); return rsize; }