c++ - 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";
}
解决方案
推荐阅读
- java - MSAL (Java) Rest API 身份验证(授权:承载令牌)
- ios - iOS 13 中没有弹出动画
- wso2 - LoggedInSessionBean 参考
- javascript - 如何让mongoose的model.findByIdAndUpdate()触发model.save()?
- cygwin - Cygwin 上的 CPAN GD 2.71 安装失败
- ruby-on-rails - 从 Rails 资产管道中获取未缩小的 JS
- javascript - 传单热图 - 地图未显示在正确的位置
- python - Ansible - 忽略特定单词的正则表达式
- python - 如何使用二维数组每一行的元素压缩一维数组中的每个元素?
- python - 如何使用 BeautifulSoup 中的文本获取元素的值