Source Code File 04-03_savememory.c
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <curl/curl.h> /* memory buffer structure */ struct web_data { char *buffer; size_t size; }; /* callback function */ static size_t write_mem( void *ptr, size_t size, size_t nmemb, void *userdata) { size_t realsize; struct web_data *mem; realsize = size * nmemb; mem = (struct web_data *)userdata; mem->buffer = realloc(mem->buffer, mem->size + realsize + 1); if( mem->buffer==NULL ) { fprintf(stderr,"Memory error\n"); exit(1); } memcpy( &(mem->buffer[mem->size]), ptr, realsize); mem->size += realsize; mem->buffer[mem->size] = 0; return(realsize); } int main() { CURL *curl; CURLcode r; char address[] = "https://c-for-dummies.com/curl_test.txt"; struct web_data page; /* initialize storage structure */ page.buffer = malloc(1); if( page.buffer==NULL ) { fprintf(stderr,"Memory error\n"); exit(1); } page.size = 0; /* initialuze curl */ curl = curl_easy_init(); /* set options */ curl_easy_setopt(curl, CURLOPT_URL,address); curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION,1L); curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION,write_mem); curl_easy_setopt(curl, CURLOPT_WRITEDATA,(void *)&page); /* read the address */ r = curl_easy_perform(curl); if( r != CURLE_OK ) { fprintf(stderr, "curl read failed: %s\n", curl_easy_strerror(r)); exit(1); } /* cleanup */ curl_easy_cleanup(curl); /* output results */ printf("Read %ld bytes:\n", page.size); printf("%s",page.buffer); return(0); }
Notes
* Wide version of this code (statements not split)
Copyright © 1997-2024 by QPBC.
All rights reserved