目录
手写http协议解析库
http协议的组成
http请求报文如下:
http响应报文如下:
状态机设计
请求报文解析
响应报文解析
代码结构设计
- 基础结构类:Response和Request,其中都包含一个Url类,用于解析得到路径和Query参数。
- 工具类:HttpParser,HttpParser用于解析纯http报文然后得到对应的Response或Request,组合成字符串信息只需要调用Request或者Response对应的to_string()方法。
代码使用示例
对于head和body的设置均可通过直接调用head()和body()方法来设置,这个方法返回的是一个左值。
#include"http-parser/Parser.h"
int main(){
http::Parser parser;
auto req = parser.ToRequest(buffer);
std::cout << req.to_string(); //根据request内容获取对应的http报文
req.head()["dfasf"] = "fda"; //随意设置request的header
req.body() = "fdsafsadf"; //设置request的body部分
//request的特殊字段(GET的FORM和POST的form
auto v = req.Query("test"); //获取第一个值
auto v1 = req.PostQuery("test"); //获取post表单里的第一个query值
req.PostMultiPart("test"); //返回form-data的键值(可以传入文件
http::Response response;
response.SetStatus(http::OK);
response.SetContentType(http::ACCEPT_CONTENT_TYPE::T_JSON);
response.SetConnection(false);
response.body() = R"({"hello world!":2323})";
auto response_text = response.to_string();
}