linux基于curl实现sftp,curl sftp libcurl 功能使用

#include

#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->stream) {

/* open file for writing */

out->stream = fopen(out->filename, "wb");

if(!out->stream)

return -1; /* failure, can't open file to write */

}

return fwrite(buffer, size, nmemb, out->stream);

}

//sftp协议

void fileLoadSftp()

{

CURL *curl;

CURLcode res;

char *filename = ui->lineEdit_path->text().toLatin1().data(); //本地文件名

QString remote = "sftp://user:password@example.com/etc/issue";

char *remote_url = remote.toLatin1().data(); //服务器路径

struct FtpFile ftpfile =

{

filename, /* name to store the file as if successful */

NULL

};

curl_global_init(CURL_GLOBAL_DEFAULT);

curl = curl_easy_init();

if(curl) {

/*

* You better replace the URL with one that works!

* sftp://user:password@example.com/etc/issue - This specifies the file /etc/issue

*/

curl_easy_setopt(curl, CURLOPT_URL, remote_url);

/* Define our callback to get called when there's data to be written */

curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, my_fwrite);

/* Set a pointer to our struct to pass to the callback */

curl_easy_setopt(curl, CURLOPT_WRITEDATA, &ftpfile);

#ifndef DISABLE_SSH_AGENT

/* We activate ssh agent. For this to work you need

to have ssh-agent running (type set | grep SSH_AGENT to check) or

pageant on Windows (there is an icon in systray if so) */

curl_easy_setopt(curl, CURLOPT_SSH_AUTH_TYPES, CURLSSH_AUTH_PASSWORD);

#endif

/* Switch on full protocol/debug output */

curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);

res = curl_easy_perform(curl);

/* always cleanup */

curl_easy_cleanup(curl);

if(CURLE_OK != res) {

/* we failed */

fprintf(stderr, "curl told us %d

", res);

}

}

if(ftpfile.stream)

fclose(ftpfile.stream); /* close the local file */

curl_global_cleanup();

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值