开源一个C++实现的简单HTTP协议处理库

HTTP协议库有两个版本,一个是基于WININET,一个则是使用socket实现的。

可以支持POST 、GET请求,断点下载、重定向下载、下载进度回调,不支持HTTPS。

接口头文件声明如下:

#pragma once
#include <string>
using std::string;
using std::wstring;
#include <stdio.h>
#include <tchar.h>

enum REQUEST_TYPE
{
	post,
	get,
};

////////////////////////////////////////////////////////////////////////////////////
//HTTP请求接口类
class IHttpInterface
{
public:
	//HTTP请求功能
	virtual string	Request(const string& strUrl, REQUEST_TYPE type, const string& strPostData="", string strHeader="")=0;
	virtual string	Request(const wstring& strUrl, REQUEST_TYPE type, const wstring& strPostData=L"", wstring strHeader=L"")=0;
	virtual bool	Download(const wstring& strUrl, const wstring& strSavePath)=0;
	virtual bool	Download(const string& strUrl, const string& strSavePath)=0;
	// 下载消息设置
	virtual void	SetWnd(HWND hWnd)=0;
	virtual void	SetMsg(const UINT msg)=0;
	//出错信息获取
	virtual const	wstring&	GetErrorMsg()const=0;
	virtual const	wchar_t*	GetErrorBuffer()const=0;
	//转码功能
	virtual wstring StringToWstring(const string& str)=0;
	virtual string	WstringToString(const wstring& str)=0;
	virtual wstring Utf8ToUnicode(const string& strUtf8)=0;
	//释放
	virtual void	FreeInstance()=0;
};

///////////////////////////////////////////////////////////////////////////////////////
//HTTP socket类

enum DownloadState
{
	DS_Loading=0,
	DS_Fialed,
	DS_Finished,
};

class IHttpInterface2;
//下载的回调
class CDownloadCallback
{
public:
	virtual void	OnDownloadCallback(IHttpInterface2* pHttpSocket, DownloadState state, int nTotalSize, int nLoadSize)=0;
	virtual bool	IsNeedStop()=0;
};

class IHttpInterface2
{
public:
	virtual wstring	GetIpAddr()const=0;
	virtual wstring GetLastError()const=0;
	virtual void	SetCallback(CDownloadCallback* pCallback)=0;
	virtual bool	DownloadFile(const wstring& strUrl, const wstring& strSavePath)=0;
	virtual void	FreeInstance()=0;
};

/////////////////////////////////////////////////////////////////////////////////
//DLL的导出函数声明
//#define LIB_DLL
#ifdef EXPORT_LIB//导出库
	#ifdef LIB_DLL
		#define LIB_FUN extern "C" __declspec(dllexport)
	#else
		#define LIB_FUN
	#endif
#else//引用库
	#ifdef LID_DLL
		#define LIB_FUN extern "C" __declspec(dllimport)
	#else
		#define LIB_FUN
	#endif
#endif

LIB_FUN	IHttpInterface* CreateHttpInstance();//创建接口实例对象

LIB_FUN bool UrlDownload( const wstring& strUrl, const wstring& strSavePath, OUT UINT& uLoadSize, 					  OUT wstring& strErrorMsg, HWND hWnd=NULL, UINT uMsg=0 );//提供C下载函数

LIB_FUN	IHttpInterface2* CreateHttpInstance2();

源代码使用VS2008开发,有DLL、LIB对应的编译方式。

使用时也比较简单的,示例代码如下:

// UseHttp.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include "../IHttp/IHttpInterface.h"
#pragma comment(lib, "../bin/Release_s/IHttp")

int _tmain(int argc, _TCHAR* argv[])
{

	IHttpInterface* pHttp=CreateHttpInstance();
	//pHttp->Download(L"http://android.shoujids.com/software/download?id=154103", L"c:\\test.apk");
	string strUrl="http://www.baidu.com";
	string str=pHttp->Request(strUrl, get);
	pHttp->FreeInstance();
// 	CHttpSocket hs;
// 	hs.ConnectUrl("android.shoujids.com");
// 	int nLoadSize=0;
// 	hs.DownLoadFile("http://android.shoujids.com/software/download?id=154103", "c:\\test.zpk", &nLoadSize);
	return 0;
}

源码下载地址:HTTP协议库

有bug欢迎指正。

时间: 2024-08-26 23:56:14

开源一个C++实现的简单HTTP协议处理库的相关文章

分享并开源一个简单粗暴的redmine测试报告系统

背景 软件测试的最后有一道比较繁琐的工作,就是编写测试报告.手写测试报告在数据统计和分析上面要耗费比较大的事件和精力.之前工作室使用mantis管理bug缺陷.公司有内部有个系统,可以直接从mantis上面获取数据并进行统计,生成一份测试报告.后来换了一个工作室,bug缺陷管理平台也从原来的mantis 换成了redmine (http://www.redmine.org/ ). 然后走上了一条手写测试报告的不归路(测试人员前期还是推荐手写测试报告的).搞游戏的都知道,平时加班加点压力就够大的.

【开源一个小工具】一键将网页内容推送到Kindle

最近工作上稍微闲点,这一周利用下班时间写了一个小工具,其实功能挺简单但也小折腾了会. 工具名称:Simple Send to Kindle Github地址:https://github.com/zhanjindong/SimpleSendToKindle 功能:Windows下一个简单的将网页内容推送到Kindle的工具. 写这个工具的是满足自己的需求.自从买了Kindle paperwhite 2,它就成了我使用率最高的一个电子设备.相信很多Kindle拥有者和我一样都有这样一个需求:就是白

《Python入门》第一个Python Web程序——简单的Web服务器

上一篇讲了<Python入门>Windows 7下Python Web开发环境搭建笔记,接下来讲一下Python语言Web服务的具体实现:第一个Python Web程序--简单的Web服务器. 与其它Web后端语言不同,Python语言需要自己编写Web服务器. 如果你使用一些现有的框架的话,可以省略这一步: 如果你使用Python CGI编程的话,也可以省略这一步: 用Python建立最简单的web服务器 利用Python自带的包可以建立简单的web服务器.在DOS里cd到准备做服务器根目录

SNMP:简单网络管理协议

为什么需要监控? 随着当前企业IT环境中服务器.应用程序数量和类型的不断增加,运维部门需要通过科学和高效的手段尽可能详细.实时和准确的获取整个架构中具体到每个服务器.每个系统甚至每个应用程序工作的细节,并且会对所获取到的原始数据进行分析.绘图和统计.以便为后续的性能调优.架构调整提供参考依据. 常见的检测对象涵盖了IT运行环境的方方面面,包括机房环境.硬件.网络等,而每一个方面所涉及的监控项目则种类繁多.例如对硬件环境的检测中,所涵盖内容就包括服务器的温度/风扇转速等指标:针对系统环境的监控,包

基于AVR128的简单Modbus协议实现

Modbus通讯协议是由Modicon公司在1979年开发的,应用于工业现场控制的总线协议.Modbus通讯系统包括带有可编程控制的芯片节点和公共传输线组成,其目的是用于多节点数据的采集和监控.Modbus协议采用主从模式,通讯系统中有一个主机对多个节点从机进行监控,从机节点最多支持247个.每个从机均有自己独立的从机地址,而且改地址能够被主机识别. 能够支持Modbus协议的通讯系统有RS-232,RS-422,RS-485等.同时Modbus协议具有标准.开放.免费.帧格式简单等特点而被广大

开源一个自己写的APP:装哔指南-记车标

想想我做安卓开发到现在也快两年了,所在的公司基本都是在做企业内部应用,自己每次做的一些小应用,都是做到一半或者快完成的时候放着积灰了.感觉很没有成就感啊!这两天心血来潮写了一个小应用:装哔指南-记车标 ,(花了两天,其中一天在搜集车标数据弄数据库 0.0 )顺便发出来给一些新手们学习学习(我也新手=.=   大神请绕道.) 下面简单介绍一下应用里面用到的知识点: 1. android SQLite 的简单使用. 2. listview和gridview 配合 BaseAdapter的使用方法.

Android开源项目pulltorefresh分析与简单使用

在Android开发中有时我们需要访问网络实时刷新数据,比如QQ好友在线状态最新信息,QQ空间需要显示更多的好友动态信息,EOE论坛客户端显示更多的文章帖子信息等.android-pulltorefresh开源项目提供一个向下滑动即刷新列表的功能,将该项目稍作修改即可应用到自己的项目中. 1.下载地址 https://github.com/johannilsson/android-pulltorefresh 该项目为 Android 应用提供一个向下滑动即刷新列表的功能. 2.工程组成 Pull

【SMTP简单邮件协议的服务配置】

**********************************************SMTP(简单邮件协议)***************************************************SMTP简单邮件协议,从属TCP/IP簇的 TCP中.端口号为25.[前置:配置 两个DNS主机,一个主maillinux,一个副hxl:maillinux(主DNS服务器,设置/etc/name.conf;/etc/name.rfc1912.zone/;~.zone的两个文件)]

PHP基础教程 HTTP简介,http是一个属于应用层的面向对象的协议

HTTP是一个属于应用层的面向对象的协议,由于其简捷.快速的方式,适用于分布式超媒体信息系统.它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展.目前在WWW中使用的是HTTP/1.0的第六版,HTTP/1.1的规范化工作正在进行之中,http://www.lampbrother.net/而且HTTP-NG(NextGeneration of HTTP)的建议兄弟连已经提出. HTTP协议的主要特点可概括如下: 1.支持客户/服务器模式. 2.简单快速:客户向服务器请求服务时,只需传