curl 实现sftp功能
来源:互联网 发布:java pdf转word 编辑:程序博客网 时间:2024/05/16 05:21
1. .h文件
#include <stdio.h>
#include <curl/curl.h>
#include <string>
#pragma comment(lib,"libcurl_imp.lib")
#undef DISABLE_SSH_AGENT
int get_file_size (FILE *file);
bool SftpUpload (std::string strSourceFilePath, std::string strSftpFilePath, int iPort, tstring &strError, int &iError);
2..cpp文件
static size_t read_callback(void *ptr, size_t size, size_t nmemb, FILE *stream){size_t retcode;curl_off_t nread;retcode = fread(ptr, size, nmemb, stream);nread = (curl_off_t)retcode;fprintf(stderr, "*** We read %" CURL_FORMAT_CURL_OFF_T " bytes from file\n", nread);return retcode;}int CSftp::get_file_size(FILE *file){int size = 0;fseek(file, 0L, SEEK_END);size = ftell(file);fseek(file, 0L, SEEK_SET);return size;}//strSourceFilePath 要上传的文件的文件路径//strSftpFilePath sftp的上传路径 sftp://username:passwors@ip/path/file.txt//iport 端口//strError 返回错误信息bool CSftp::SftpUpload(std::string strSourceFilePath, std::string strSftpFilePath, int iPort, tstring &strError, int &iError){bool bError = true;CURL* curl;CURLcode res;const char *sourcePath = strSourceFilePath.c_str();const char *sftpPath = strSftpFilePath.c_str();FILE* file = fopen(sourcePath, "rb");curl_global_init(CURL_GLOBAL_ALL);curl = curl_easy_init();if(curl) {curl_easy_setopt(curl, CURLOPT_URL,sftpPath);curl_easy_setopt(curl, CURLOPT_PORT, iPort);curl_easy_setopt(curl, CURLOPT_READFUNCTION,read_callback);curl_easy_setopt(curl, CURLOPT_READDATA,file);curl_easy_setopt(curl, CURLOPT_INFILESIZE_LARGE,get_file_size(file));curl_easy_setopt(curl, CURLOPT_FTP_RESPONSE_TIMEOUT,120);#ifndef DISABLE_SSH_AGENTcurl_easy_setopt(curl, CURLOPT_SSH_AUTH_TYPES, CURLSSH_AUTH_PASSWORD);#endifcurl_easy_setopt(curl, CURLOPT_FTP_CREATE_MISSING_DIRS, 1L);curl_easy_setopt(curl, CURLOPT_UPLOAD, 1L);res = curl_easy_perform(curl);curl_easy_cleanup(curl);if(CURLE_OK != res) {fprintf(stderr, "curl told us %d\n", res);bError = false;GetErrorInfo(res, strError);iError = res;}}fclose(file); curl_global_cleanup();return bError;}void CSftp::GetErrorInfo (int resId, std::wstring & strError){ switch (resId) { case CURLE_COULDNT_CONNECT: strError = _T("couldn't connect"); break; case CURLE_LOGIN_DENIED: strError = _T("user, password or similar was not accepted and we failed to login."); break; case CURLE_REMOTE_FILE_NOT_FOUND: strError = _T("remote file not found"); break; case CURLE_COULDNT_RESOLVE_HOST: strError = _T("couldn't resolve host"); break; default: strError = resId; break; }}
实例地址:
http://download.csdn.net/detail/leftstrang/9632264
0 1
- curl 实现sftp功能
- .net 实现sftp 上传下载功能
- day-18 paramiko 实现sftp功能
- Java用SFTP实现上传下载功能
- Python实现简单的ftp与sftp日志上传功能
- Python使用sftp实现上传和下载功能
- JSch Java实现的 SFTP功能的利器
- LinuxC语言实现下载功能(curl)
- LinuxC语言实现上传功能(curl)
- ubuntu 上的 curl 安装 针对 sftp
- c/c++/curl实现facebook上传图片等功能
- 推荐一个curl库,实现整站克隆功能
- 【php】用curl实现校图书馆书籍查询功能
- PHP采用curl多线程抓取网页功能实现
- java实现sftp上传
- JAVA实现SFTP实例
- JAVA实现SFTP实例
- php实现sftp
- 二级C语言复习5
- Linux c — void类型变量和指针
- 使用jms工厂连接websphere mq
- 微信公众平台开发教程第1篇-新手解惑
- 第三周项目二 建设“顺序表”算法库
- curl 实现sftp功能
- [Android] ButterKnife8.0以上 空指针错误
- 基于cocos2d-x引擎3.9版本分析之CCRef篇
- linux mkdir命令小结
- sizeof和strlen的区别
- oracle for循环loop的工作机制
- 关于Volley的使用方式
- android中sharedPreferences的用法
- Struts2_08_利用DomainModel接收参数