#include #include #include #include #define URL_DEFAULT "google.co.kr" typedef struct content_s { size_t len; char *buf; } content_t; static size_t my_write(void *ptr, size_t size, size_t nmemb, void *stream) { size_t addition = size * nmemb; char *new_buf; content_t *content = stream; if (!addition) return 0; new_buf = realloc(content->buf, content->len + addition + 1); if (!new_buf) { perror("realloc()"); return 0; } content->buf = new_buf; memcpy(content->buf + content->len, ptr, addition); content->len += addition; return addition; } int main(int argc, char **argv) { CURL *curl; CURLcode res; content_t content = { .len = 0, .buf = NULL}; const char *url_str = argv[1]; if (argc < 2) url_str = URL_DEFAULT; curl = curl_easy_init(); if (!curl) return 1; curl_easy_setopt(curl, CURLOPT_VERBOSE, 10); curl_easy_setopt(curl, CURLOPT_URL, url_str); curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, my_write); curl_easy_setopt(curl, CURLOPT_WRITEDATA, &content); res = curl_easy_perform(curl); fprintf(stderr, "result: %s\n", curl_easy_strerror(res)); curl_easy_cleanup(curl); if (content.buf) { printf("\n------- my content ---------\n\n"); content.buf[content.len] = 0; printf("%s\n", content.buf); } free(content.buf); return 0; }