Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 从服务器(cUrl,不过接受建议)C++;_C++_C_Image_Curl_Download - Fatal编程技术网

C++ 从服务器(cUrl,不过接受建议)C++;

C++ 从服务器(cUrl,不过接受建议)C++;,c++,c,image,curl,download,C++,C,Image,Curl,Download,我正试图通过从服务器(网站)下载图像来设置旋转背景图像,并尝试使用curl进行此操作,但成功率为0。下面是我的代码的(缩写)版本。我没有收到错误,但是,我如何“暂时”保存此图像以将其显示为我的背景?有图像(-type变量)之类的吗 这只是一次学习体验,因此任何图书馆或建议都将不胜感激。 #include <curl/curl.h> CURL *curlCtx = curl_easy_init(); curl_easy_setopt(curlCtx, CURLOPT_URL, "htt

我正试图通过从服务器(网站)下载图像来设置旋转背景图像,并尝试使用curl进行此操作,但成功率为0。下面是我的代码的(缩写)版本。我没有收到错误,但是,我如何“暂时”保存此图像以将其显示为我的背景?有图像(-type变量)之类的吗

这只是一次学习体验,因此任何图书馆或建议都将不胜感激。

#include <curl/curl.h>
CURL *curlCtx = curl_easy_init();
curl_easy_setopt(curlCtx, CURLOPT_URL, "http://www.examplesite.com/testimage.jpeg");
curl_easy_setopt(curlCtx, CURLOPT_WRITEDATA, this);
curl_easy_setopt(curlCtx, CURLOPT_WRITEFUNCTION, callbackfunction);
const CURLcode rc = curl_easy_perform(curlCtx);
if(rc == CURLE_OK){
    //it worked
}


size_t callbackfunction(char *data, size_t size, size_t nmemb, void *stream){
    //do something here with image...?
}
#包括
CURL*curlCtx=CURL_easy_init();
curl\u easy\u setopt(curlCtx,CURLOPT\u URL,“http://www.examplesite.com/testimage.jpeg");
curl_easy_setopt(curlCtx,CURLOPT_WRITEDATA,this);
curl\u easy\u setopt(curlCtx、CURLOPT\u WRITEFUNCTION、callbackfunction);
const CURLcode rc=curl\u easy\u perform(curlCtx);
如果(rc==CURLE_OK){
//它起作用了
}
大小调用函数(char*数据、大小、大小nmemb、void*流){
//在这里用图像做些什么。。。?
}
谢谢, 詹姆斯


编辑:很抱歉,我错误地将()添加到callbackfunction中。

您的代码甚至不可编译伯格

应实现
callbackfunction()
,以处理传入的数据流。在这种情况下,我猜您希望将数据写入文件,对吗

检查调用的返回总是一种好的做法,所以请仔细阅读我正在共享的源代码。下面的程序完成了您尝试执行的操作

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;
}

此应用程序使用下载的数据在磁盘中创建一个名为
out.jpg
的文件。

您在第5行编写了
callbackfunction()
而不是
callbackfunction
./dw http://unicornify.appspot.com/avatar/51d623f33f8b83095db84ff35e15dbe8?s=128