项目简介
本项目是一个用C语言编写的HTTP消息解析器。它以Node.js贡献者开发的http-parser为基础,保持同步更新,并且支持AVR SoC。该解析器适用于高性能HTTP应用,可对HTTP请求和响应进行解析,具有不进行系统调用、不分配内存、不缓冲数据、可随时中断等优点。
项目的主要特性和功能
- 无依赖:使用时无需额外依赖。
- 持久流处理:能够处理持久连接(keep-alive)。
- 分块编码解码:自动对分块编码进行解码。
- 协议升级支持:支持将连接升级到不同协议,如WebSocket。
- 安全防护:可防御缓冲区溢出攻击。
- 信息提取:能从HTTP消息中提取多种信息,包括头部字段和值、内容长度、请求方法、响应状态码等。
安装使用步骤
假设用户已经下载了本项目的源码文件,可按以下步骤操作:
1. 准备C语言编译环境,因为项目是基于C语言编写的。
2. 初始化http_parser
对象:每个TCP连接使用一个http_parser
对象,使用http_parser_init()
初始化结构体并设置回调函数。示例如下:
```c
http_parser_settings settings;
settings.on_url = my_url_callback;
settings.on_header_field = my_header_field_callback;
/... /
http_parser parser = malloc(sizeof(http_parser));
http_parser_init(parser, HTTP_REQUEST);
parser->data = my_socket;
3. 接收数据并执行解析:当在套接字上接收到数据时,执行解析器并检查错误。示例如下:
c
size_t len = 801024, nparsed;
char buf[len];
ssize_t recved;
recved = recv(fd, buf, len, 0);
if (recved < 0) { / Handle error. / }
/ Start up / continue the parser. * Note we pass recved==0 to signal that EOF has been received. / nparsed = http_parser_execute(parser, &settings, buf, recved);
if (parser->upgrade) {
/ handle new protocol /
} else if (nparsed!= recved) {
/ Handle error. Usually just close the connection. /
}
``
4. 处理回调:在
http_parser_execute()调用期间,
http_parser_settings中设置的回调函数将被执行。回调函数分为通知型和数据型,成功时必须返回0,非零值表示错误。
5. 处理升级:若
http_parser_execute()返回后
parser->upgrade被设置为1,则需处理新协议,非HTTP数据从
http_parser_execute()`返回值偏移后的缓冲区开始。
下载地址
点击下载 【提取码: 4003】【解压密码: www.makuang.net】