因为要研究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 路由---