//编译方法: g++ sftpDownload.cpp -lcurl
#include <stdio.h>
#include <stdlib.h>
#include <curl/curl.h> // 这里不是#include <curl.h>
#include <iostream>
using namespace std;
#undef DISABLE_SSH_AGENT
struct FtpFile
{
const char *filename;
FILE *stream;
};
static size_t my_fwrite(void *buffer, size_t size, size_t nmemb, void *stream)
{
struct FtpFile *out = (struct FtpFile *)stream;
if (out && !out->stream)
{
out->stream = fopen(out->filename, "wb");
if (!out->stream)
return -1;
}
int ret = fwrite(buffer, size, nmemb, out->stream);
cout << "size = " << size << ", nmemb = " << nmemb << endl;
return ret;
}
int main(void)
{
CURL *curl;
CURLcode res;
const char *urlkey = "muten:123456"; //服务器用户名及密码
const char *ServerIpPath = "sftp://192.168.244.139:22/home/muten/test001"; // 这里是否加端口都可以
/*
这里ServerIpPath的值可以为以下四个:
【sftp://192.168.244.139:22/home/muten/new.zip】
【sftp://192.168.244.139/home/muten/new.zip】
【sftp://192.168.244.139//home/muten/new.zip】
【sftp://192.168.244.139///home/muten/new.zip】
*/
struct FtpFile ftpfile = {"/home/muten003/test001", NULL}; // 这里必须写下载到本机之后的文件名,不能用路径来代替,否则会报错
curl_global_init(CURL_GLOBAL_DEFAULT);
curl = curl_easy_init();
if (curl)
{
curl_easy_setopt(curl, CURLOPT_URL, ServerIpPath);
curl_easy_setopt(curl, CURLOPT_USERPWD, urlkey);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, my_fwrite);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &ftpfile);
#ifndef DISABLE_SSH_AGENT
curl_easy_setopt(curl, CURLOPT_SSH_AUTH_TYPES, CURLSSH_AUTH_PASSWORD);
#endif
curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);
res = curl_easy_perform(curl);
curl_easy_cleanup(curl);
if (CURLE_OK != res)
{
fprintf(stderr, "curl told us %d\n", res);
}
}
if (ftpfile.stream)
{
fclose(ftpfile.stream);
}
curl_global_cleanup();
return 0;
}
依赖libcurl库实现sftp的下载功能
于 2022-04-24 12:52:32 首次发布