文档章节

c++ httpserver 服务器

开飞色
 开飞色
发布于 06/14 12:16
字数 706
阅读 9
收藏 0
点赞 0
评论 0

因为要研究http协议 所以找到这个库说是超级好用 玩弄一番之后 ,我来给出使用方法可封装类 图就不给了 直接上代码

mongoose.c mongoose.h 首先下载下载这个代码 一个c一个h vs新建一个项目然后引入 新建一个cpp 下面是封装类

#pragma once
#define _MOHTTP_H
#ifdef _MOHTTP_H
#include "mongoose.h"
#include <iostream>
using namespace std;
const int CHAR_HTTP_VAR_MAX =800000;
const int CHAR_HTTP_COOKIE_MAX = 400;
class MoHttp
{
private:
	struct http_message *hm = NULL;

public:
	MoHttp(struct http_message *);
	~MoHttp();
	int getGetVar(const char*, char*) const;    //获取变量
	void getGetVar(const char*, string &) const;    //获取变量
	int getPostVar(const char *,char *) const;
	 //获取变量
	bool send(mg_connection * nc, int status_code, const char * data);
	void getPostVar(const char*, string &) const;    //获取变量
	int getCookie(const char*, char*) const;    //获取Cookie
	void getCookie(const char*, string &) const;    //获取Cookie
	int Model() const;    //判断当前模式 POST/GET    1为 GET 否则为0
};
class MoHttpServer
{
public:
	MoHttpServer(char *);
	~MoHttpServer();
};
#endif

然后给出实现代码:

MoHttp::MoHttp(struct http_message * hm = NULL)
{
	this->hm = hm;
}
int MoHttp::getGetVar(const char* name, char* var) const
{
	memset(var, '\0', sizeof(var));
	if (hm == NULL || name == NULL || hm->query_string.p == NULL)return -1;
	return mg_get_http_var(&hm->query_string, name, var, sizeof(var));        //获取变量
}
void MoHttp::getGetVar(const char* name, string & str) const
{
	str = "";
	char var[CHAR_HTTP_VAR_MAX];
	var[0] = '\0';
	if (hm == NULL || name == NULL || hm->query_string.p == NULL)return;
	mg_get_http_var(&hm->query_string, name, var, sizeof(var));        //获取变量
	if (var[0] == '\0') {
		return;
	}
	str = var;    //如果数据正确
}
int MoHttp::getPostVar(const char* name,char* varA) const
{
	static char var[CHAR_HTTP_VAR_MAX];
	var[0] = '\0';
	if (hm == NULL || name == NULL/* || hm->query_string.p == NULL*/)return 0;
	INT A=mg_get_http_var(&hm->body, name, var, sizeof(var));        //获取变量
	if (var[0] == '\0') {
		return 0;
	}
	memcpy(varA, var, A);
	varA[A] = '\0';
	return A;
//	delete[] var;
}
bool MoHttp::send(struct mg_connection *nc, int status_code,const char *data)
{
	mg_http_send_error(nc,404, data);
	return true;       
}
void MoHttp::getPostVar(const char* name, string & str) const
{
	str = "";
	char var[CHAR_HTTP_VAR_MAX];
	var[0] = '\0';
	if (hm == NULL || name == NULL || hm->query_string.p == NULL)return;
	mg_get_http_var(&hm->body, name, var, sizeof(var));        //获取变量
	if (var[0] == '\0') {
		return;
	}
	printf("%s\n", var);
	str = var;    //如果数据正确
}
int MoHttp::Model() const
{

	if (hm == NULL || hm->method.p == NULL)return -1;    //数据错误
	if (mg_vcmp(&hm->method, "POST") != 0)return 1;
	return 0;

}
int MoHttp::getCookie(const char * name, char * var) const
{
	memset(var, '\0', sizeof(var));
	//mg_printf(nc, "Set-Cookie: %s=%s; path=/\r\n", "wwe", "123456789");    发送Cookie
	if (hm == NULL) return -999;
	struct mg_str *cookie_header = mg_get_http_header(hm, "cookie");    //获取Cookie 整条
	if (cookie_header == NULL) return -999; //<0
	return mg_http_parse_header(cookie_header, name, var, sizeof(var));
}
void MoHttp::getCookie(const char* name, string & str) const
{
	str = "";
	char var[CHAR_HTTP_COOKIE_MAX];    //Cookie 最大更长
	var[0] = '\0';
	if (hm == NULL || name == NULL || hm->query_string.p == NULL)return;
	struct mg_str *cookie_header = mg_get_http_header(hm, "cookie");    //获取Cookie 整条
	if (cookie_header == NULL) return;
	mg_http_parse_header(cookie_header, name, var, sizeof(var));
	if (var[0] == '\0') {
		return;
	}
	str = var;    //如果数据正确
}
MoHttp::~MoHttp()
{

}

到这里呢 我们就可以使用了 某个python库也使用这个封装而成的 篇幅有限 我就不解释其中的意思了,可以自己阅读源码来了解源码实现 有助于我们学习理解http协议 使用方法很简单

int main(void) {
	srand((unsigned)time(0));
	MoHttpServer http("8080");
	return 0;
}

了解原理之后就可以自己封装业务逻辑了 例如get post 路由---

© 著作权归作者所有

共有 人打赏支持
开飞色
粉丝 9
博文 50
码字总数 23849
作品 0
昆明
程序员
C语言/C++程序员编程学习自信心曲线图

C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到...

小辰带你看世界 ⋅ 05/10 ⋅ 0

C语言/C++永远都不会过时的编程语言

C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到...

小辰带你看世界 ⋅ 03/30 ⋅ 0

C语言/C++编程学习强势之处的体现

C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到...

小辰带你看世界 ⋅ 05/12 ⋅ 0

C语言/C++编程学习未来之路

C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到...

小辰带你看世界 ⋅ 03/30 ⋅ 0

C语言/C++编程学习:获取电脑开机时间

C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到...

小辰带你看世界 ⋅ 05/21 ⋅ 0

C语言编程学习项目实战:图书管理系统

C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到...

小辰带你看世界 ⋅ 06/04 ⋅ 0

C语言/C++编程学习:算法之排序:折半插入法

C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到...

小辰带你看世界 ⋅ 05/13 ⋅ 0

C语言编程基础新手学习经典练习题和答案详解入门必备

C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到...

小辰带你看世界 ⋅ 05/13 ⋅ 0

C语言/C++编程新手学习常见问题

C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到...

小辰带你看世界 ⋅ 05/11 ⋅ 0

C语言/C++程序员编程基础学习代码训练

C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到...

小辰带你看世界 ⋅ 03/27 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

windows profesional 2017 build problem

.net framework .... https://stackoverflow.com/questions/43330915/could-not-load-file-or-assembly-microsoft-build-frameworkvs-2017...

机油战士 ⋅ 40分钟前 ⋅ 0

python3中报错的解决方法(长期更新)

1、ImportError: No module named ‘DjangoUeditor’ 出错原因:安装DjangoUeditor库适用于python2,需要下载适用python3的 下载地址:https://github.com/twz915/DjangoUeditor3 2、python3......

xiaoge2016 ⋅ 45分钟前 ⋅ 0

数据结构与算法之双向链表

一、双向链表 1.双向链表的结点结构 typedef struct DualNode{ ElemType data; struct DualNode *prior; // 前驱结点 struct DualNode *next; // 后继结点}DualNode, *DuL...

aibinxiao ⋅ 今天 ⋅ 0

五大最核心的大数据技术

大数据技术有5个核心部分,数据采集、数据存储、数据清洗、数据挖掘、数据可视化。关于这5个部分,有哪些核心技术?这些技术有哪些潜在价值?看完今天的文章就知道了。 大数据学习群:7165810...

董黎明 ⋅ 今天 ⋅ 0

PhpStorm 头部注释、类注释和函数注释的设置

首先,PhpStorm中文件、类、函数等注释的设置在:setting-》Editor-》FIle and Code Template-》Includes下设置即可,其中方法的默认是这样的: /**${PARAM_DOC}#if (${TYPE_HINT} != "v...

nsns ⋅ 今天 ⋅ 0

spring.net AOP

http://www.springframework.net/doc-latest/reference/html/aop-quickstart.html https://www.cnblogs.com/wujy/archive/2013/04/06/3003120.html...

whoisliang ⋅ 今天 ⋅ 0

【HAVENT原创】创建 Dockerfile 生成新的镜像,并发布到 DockerHub

注意:Win7 与 Win10 的版本存在差异,Win7 版本使用 Docker Quickstart Terminal 进入控制台,Win10下面直接用管理员权限打开控制台或者 PowerShell 即可;另外 Win7 下面只能访问 C盘,/ap...

HAVENT ⋅ 今天 ⋅ 0

pom.xml出现web.xml is missing ...解决方案

提示信息应该能看懂。也就是缺少了web.xml文件,<failOnMissingWebXml>被设置成true了。 搜索了一下,Stack Overflow上的答案解决了问题,分享一下。 目前被顶次数最多的回答原文如下: This...

源哥L ⋅ 今天 ⋅ 0

js时间戳与日期格式之间相互转换

1. 将时间戳转换成日期格式 1 2 3 4 5 6 7 8 9 10 11 12 13 14 // 简单的一句代码 var date = new Date(时间戳); //获取一个时间对象 /** 1. 下面是获取时间日期的方法,需要什么样的格式自己...

Jack088 ⋅ 今天 ⋅ 0

web添加log4j

添加xml配置log4j.properties # Global logging configuration---root日志设置#log4j.rootLogger=info,dailyRollingFile,stdoutlog4j.rootLogger=debug,stdout,dailyRollingFile---......

黄柳淞 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部