这里是libcurl库的一个简单封装,支持跨平台。
声明:
本文章可以转载,但必须注明源博客地址。共享的demo和curltools类不允许个人上传网络赚取积分和现金,如有发现必定追究责任,请慎重。
直接下载我上传的资源把curl文件夹解压到工程代码目录下导入curltools头文件和源文件到工程中,方可直接使用。
封装的源码下载地址:http://download.csdn.net/download/wu110112/10180420。
ftpdemo下载地址:http://download.csdn.net/download/wu110112/10180455
1、支持协议:http、https(短连接封装模式)
2、支持ca证书
3、支持表单提交
4、支持ftp上传/下载/远端目录列表获取(长连接封装模式)
5、支持STL string 字符全局替换功能
http调用如图:
FTP调用如图:
FTP效果如图:
头文件:
#pragma once
#include <string>
#include <vector>
#include "include/curl.h"
#include "include/easy.h"
#pragma comment(lib,"curl/lib/libcurl.lib")
/************************************************************************/
/* libcurl库封装 ssdwujianhua 2017年6月7日 13:17:11 */
/************************************************************************/
//表单key对应的类型
enum E_KEY_TYPE {
e_key_text, //文本类型
e_key_iamge //图片类型
};
//表单信息结构
typedef struct
{
std::string strKey;
std::string strVal;
E_KEY_TYPE eKeyType;
void Set(std::string key, std::string val, E_KEY_TYPE eType)
{
strKey = key;
strVal = val;
eKeyType = eType;
}
}POST_LIST, *LPPOST_LIST;
//表单数据
#define _POST_LIST_DATA_ std::vector<POST_LIST>
class CTools
{
public:
static std::string replace(const char *pszSrc, const char *pszOld, const char *pszNew);
static const char * getAppPath();
};
class CUrlHttp
{
public:
CUrlHttp(void);
~CUrlHttp(void);
static int Request(std::string strRequestType,
std::string strUrl,
std::string &strReport,
std::vector<std::string> vecHeader,
std::string strParam="",
std::string strCookie="",
std::string strCaPath="",
int nTimeOut=0);
//有图片建议使用表单提交比较方便
static int RequestSSL(std::string strUrl,
std::string &strReport,
_POST_LIST_DATA_ listParam,
std::vector<std::string> vecHeader,
std::string strCookie="",
std::string strCaPath="",
int nTimeOut=0);
};
class CUrlFtp
{
public:
CUrlFtp();
~CUrlFtp();
typedef struct
{
size_t type; //0:文件夹 1:文件
std::string name; //名称
std::string permissions; //权限
}FILE_INFO, *LPFILE_INFO;
public:
int connect(const char *user, const char *password, const char * ip, short port=21);
void close();
int download(const char * remoteFile, const char * localFile, size_t timeOut=0);
int upload(const char * remoteFile, const char * localFile, size_t timeOut=0);
int dirlist(const char * remote, std::vector<FILE_INFO> &vecFileInfo);
const char * getLastError();
private:
CURL *curl;
std::string m_ip;
std::string m_user;
std::string m_password;
short m_port;
std::str