首页 > 解决方案 > c++ Libcurl ftp 在内存中下载/上传

问题描述

我正在尝试使用LibCurl从ftp服务器(提供者:bplaced.net)下载/(然后再次上传)一个json文件到内存中,但我得到一个错误。

请不要对我很陌生。也请随时改进我的代码谢谢:p

记忆方法:

struct MemoryStruct {
char* memory;
size_t size;
};

static size_t
WriteMemoryCallback(void* contents, size_t size, size_t nmemb, void* userp)
{
size_t realsize = size * nmemb;
struct MemoryStruct* mem = (struct MemoryStruct*)userp;

char* ptr = (char*)realloc(mem->memory, mem->size + realsize + 1);
if (ptr == NULL) {
    /* out of memory! */
    printf("not enough memory (realloc returned NULL)\n");
    return 0;
}

mem->memory = ptr;
memcpy(&(mem->memory[mem->size]), contents, realsize);
mem->size += realsize;
mem->memory[mem->size] = 0;

return realsize;
}

下载方法:

std::string getFTPFileMem() {
CURL* curl;
CURLcode res;
std::string memory;

struct MemoryStruct chunk;

chunk.memory = (char*)malloc(1);  /* will be grown as needed by the realloc above */
chunk.size = 0;    /* no data at this point */

curl_global_init(CURL_GLOBAL_DEFAULT);

curl = curl_easy_init();
if (curl) {

    curl_easy_setopt(curl, CURLOPT_URL,
        "ftp://user:pass@host/jsonLocation/Json.json");

    /* send all data to this function  */
    curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteMemoryCallback);

    /* we pass our 'chunk' struct to the callback function */
    curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void*)&chunk);

    /* We activate SSL and we require it for both control and data */
    curl_easy_setopt(curl, CURLOPT_USE_SSL, CURLUSESSL_ALL);

    /* Switch on full protocol/debug output */
    curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);

    res = curl_easy_perform(curl);

    memory = chunk.memory;

    /* always cleanup */
    curl_easy_cleanup(curl);

    if (CURLE_OK != res) {
        /* we failed */
        fprintf(stderr, "curl told us %d\n", res);
    }
}

free(chunk.memory);

/* we're done with libcurl, so clean it up */
curl_global_cleanup();

return memory;
}

int main() {
std::cout << getFTPFileMem() << "\n";
}

FTP证书问题:

标签: c++ftplibcurl

解决方案


推荐阅读