2009-02-15 14:51:07 +01:00
|
|
|
#include "basiccurl.h"
|
|
|
|
|
|
|
|
CURL_LOAD_DATA *grab_http_response(const char *url)
|
|
|
|
{
|
2011-04-02 05:45:50 +02:00
|
|
|
CURL_LOAD_DATA *data;
|
2009-02-15 14:51:07 +01:00
|
|
|
|
2011-04-02 05:45:50 +02:00
|
|
|
CURL *curl = curl_easy_init();
|
2009-02-15 14:51:07 +01:00
|
|
|
|
2011-04-02 05:45:50 +02:00
|
|
|
if(curl)
|
|
|
|
{
|
|
|
|
data = do_grab(curl,url);
|
|
|
|
curl_easy_cleanup(curl);
|
|
|
|
return data;
|
|
|
|
}
|
|
|
|
return NULL;
|
2009-02-15 14:51:07 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
CURL_LOAD_DATA *do_grab(CURL *curl,const char *url)
|
|
|
|
{
|
2011-04-02 05:45:50 +02:00
|
|
|
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);
|
2009-02-15 14:51:07 +01:00
|
|
|
|
2011-04-02 05:45:50 +02:00
|
|
|
res=curl_easy_perform(curl);
|
2009-02-15 14:51:07 +01:00
|
|
|
|
2011-04-02 05:45:50 +02:00
|
|
|
return data;
|
2009-02-15 14:51:07 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
size_t response_callback(void *ptr,size_t size,size_t nmemb, void *d)
|
|
|
|
{
|
2011-04-02 05:45:50 +02:00
|
|
|
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;
|
2009-02-15 14:51:07 +01:00
|
|
|
}
|