分享个C++封装Libcurl代码(支持下载文件、GET\POST、重定向断点续传等功能)

前言

前面分享过一个Windows上封装Winhttp和WinInet API的代码,结果下载页好评特别多(呵呵),谢谢大家赏脸。文章地址:开源一个C++实现的简单HTTP协议处理库,里面有代码资源下载地址。但是,在实际开发过程中我发现WinHttp API严重依赖微软的IE组件,下载过程中会出现些很少见的异常。(比如下载文件和使用chrome浏览器下载的文件不一样。。。。)因此,有必要替换掉这个HTTP封装库。为什么选择Libcurl?大名鼎鼎的Libcurl,很多开源软件以及国内客户端都使用了,跨平台、强大的功能(各种请求、重定向、断电续传、支持HTTPS……)。前面还写过一篇使用Libcurl下载文件的小例子,那只是很久前的入门文章:使用libcurl下载文件小例

代码

/*****************************************
*封装Libcurl下载库
*author:Jelin
*date:2016年2月24日		
*/
#pragma once
#include <curl/curl.h>
#include <string>
using std::string;





class CLibcurlCallback
{
public:
	virtual void Progress(void* lpParam, double dTotal, double bLoaded) = 0;
};

enum LibcurlFlag
{
	Lf_None = 0,
	Lf_Download,
	Lf_Post,
	Lf_Get,
};

class CLibcurl
{
public:
	CLibcurl(void);
	~CLibcurl(void);
	/******************************************************************************
	*封装类的外部调用接口
	*/
	bool SetPort(LONG port);											//设置连接端口号
	bool SetTimeout(int nSecond);										//设置执行超时(秒)
	bool SetConnectTimeout(int nSecond);								//设置连接超时(秒)
	bool SetUserAgent(LPCSTR lpAgent);									//设置用户代理
	bool SetResumeFrom(LONG lPos);										//设置断点续传起始位置
	bool SetResumeFromLarge(LONGLONG llPos);							//设置断点续传起始位置,针对大文件
	bool AddHeader(LPCSTR lpKey, LPCSTR lpValue);						//添加自定义头
	void ClearHeaderList();												//清理HTTP列表头
	bool SetCookie(LPCSTR lpCookie);									//设置HTTP请求cookie
	bool SetCookieFile(LPCSTR lpFilePath);								//设置HTTP请求cookie文件
	const char* GetError()const;										//获取错误详细信息
	void SetCallback(CLibcurlCallback* pCallback, void* lpParam);		//设置下载进度回调
	bool DownloadToFile(LPCSTR lpUrl, LPCSTR lpFile);					//下载文件到磁盘
	bool Post(LPCSTR lpUrl, LPCSTR lpData);								//Post 字符串数据
	bool Post(LPCSTR lpUrl, unsigned char* lpData, unsigned int nSize); //Post 字符串或者二进制数据
	bool Get(LPCSTR lpUrl);												//Get 请求
	const string& GetRespons()const;									//获取Post/Get请求返回数据
	const char*	GetResponsPtr()const;									//获取Post/Get请求返回数据

protected:
	static size_t	WriteCallback
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值