#include #include #include static size_t write_callback(char *ptr, size_t size, size_t nmemb, void *stream) { size_t written = fwrite(ptr, size, nmemb, (FILE *)stream); return written; } int main(void) { int ret = EXIT_FAILURE; if (curl_global_init(CURL_GLOBAL_ALL) != CURLE_OK) { fputs("error: curl_global_init failed.\n", stderr); return ret; } CURL *curl = curl_easy_init(); if (!curl) { fputs("error: curl_easy_init failed.\n", stderr); goto GLOB_CLEAN; } curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); /* curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L); */ char const* file_name = "example.html"; FILE *stream = fopen(file_name, "w"); if (!stream) { fprintf(stderr, "failed to open %s\n", file_name); goto EASY_CLEAN; } curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_callback); curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void*)stream); CURLcode result = curl_easy_perform(curl); fclose(stream); if (result != CURLE_OK) { fprintf(stderr, "error: %s\n", curl_easy_strerror(result)); goto EASY_CLEAN; } ret = EXIT_SUCCESS; EASY_CLEAN: curl_easy_cleanup(curl); GLOB_CLEAN: curl_global_cleanup(); return ret; }