Download an Image from Server (cUrl, however taking suggestions) C++ Download an Image from Server (cUrl, however taking suggestions) C++ curl curl

Download an Image from Server (cUrl, however taking suggestions) C++


Your code is not even compilable! URG!

The callbackfunction() should be implemented to handle the incoming data stream. In this case, I guess you want the write the data in a file, right?

It's always good practice to check the return of the calls, so take the source code I'm sharing and study it carefully. The program below accomplishes what you were trying to do.

dw.cpp:

#include <stdio.h>#include <curl/curl.h>size_t callbackfunction(void *ptr, size_t size, size_t nmemb, void* userdata){    FILE* stream = (FILE*)userdata;    if (!stream)    {        printf("!!! No stream\n");        return 0;    }    size_t written = fwrite((FILE*)ptr, size, nmemb, stream);    return written;}bool download_jpeg(char* url){    FILE* fp = fopen("out.jpg", "wb");    if (!fp)    {        printf("!!! Failed to create file on the disk\n");        return false;    }    CURL* curlCtx = curl_easy_init();    curl_easy_setopt(curlCtx, CURLOPT_URL, url);    curl_easy_setopt(curlCtx, CURLOPT_WRITEDATA, fp);    curl_easy_setopt(curlCtx, CURLOPT_WRITEFUNCTION, callbackfunction);    curl_easy_setopt(curlCtx, CURLOPT_FOLLOWLOCATION, 1);    CURLcode rc = curl_easy_perform(curlCtx);    if (rc)    {        printf("!!! Failed to download: %s\n", url);        return false;    }    long res_code = 0;    curl_easy_getinfo(curlCtx, CURLINFO_RESPONSE_CODE, &res_code);    if (!((res_code == 200 || res_code == 201) && rc != CURLE_ABORTED_BY_CALLBACK))    {        printf("!!! Response code: %d\n", res_code);        return false;    }    curl_easy_cleanup(curlCtx);    fclose(fp);    return true;}int main(int argc, char** argv){    if (argc < 2)    {       printf("Usage: %s <url>\n", argv[0]);       return -1;    }    if (!download_jpeg(argv[1]))    {        printf("!! Failed to download file: %s\n", argv[1]);        return -1;    }    return 0;}

Compiled with: g++ dw.cpp -o dw -lcurl and tested with:

./dw http://unicornify.appspot.com/avatar/51d623f33f8b83095db84ff35e15dbe8?s=128

This application creates a file in the disk named out.jpg with the data it downloaded.