当前位置: 首页 > news >正文

LLHTTP测试

文件结构

在这里插入图片描述

测试代码

#include <stdio.h>
#include <string.h>
#include <llhttp.h>#define BUFFER_MAXIMUM 0xFFUuint8_t temp[500] = {0};#define DEF_PRINT_FUNCTION(__x) \
int __x(llhttp_t *parser){ \printf("%s\n", __FUNCTION__); \return 0;\
}#define DEF_PRINT_FUNCTION_DATA(__x) \
int __x(llhttp_t *parser, const char *at, size_t length){ \memset(temp, 0, length + 1); \memcpy(temp, at, length); \printf("%s : [%s]\n", __FUNCTION__, temp); \return 0;\
}DEF_PRINT_FUNCTION_DATA(cb_protocol)
DEF_PRINT_FUNCTION_DATA(cb_url)
DEF_PRINT_FUNCTION_DATA(cb_status)
DEF_PRINT_FUNCTION_DATA(cb_method)
DEF_PRINT_FUNCTION_DATA(cb_version)
DEF_PRINT_FUNCTION_DATA(cb_header_field)
DEF_PRINT_FUNCTION_DATA(cb_header_value)
DEF_PRINT_FUNCTION_DATA(cb_chunk_extension_name)
DEF_PRINT_FUNCTION_DATA(cb_chunk_extension_value)
DEF_PRINT_FUNCTION_DATA(cb_body)
DEF_PRINT_FUNCTION(cb_message_begin)
DEF_PRINT_FUNCTION(cb_headers_complete)
DEF_PRINT_FUNCTION(cb_message_complete)
DEF_PRINT_FUNCTION(cb_protocol_complete)
DEF_PRINT_FUNCTION(cb_url_complete)
DEF_PRINT_FUNCTION(cb_status_complete)
DEF_PRINT_FUNCTION(cb_method_complete)
DEF_PRINT_FUNCTION(cb_version_complete)
DEF_PRINT_FUNCTION(cb_header_field_complete)
DEF_PRINT_FUNCTION(cb_header_value_complete)
DEF_PRINT_FUNCTION(cb_chunk_extension_name_complete)
DEF_PRINT_FUNCTION(cb_chunk_extension_value_complete)
DEF_PRINT_FUNCTION(cb_chunk_header)
DEF_PRINT_FUNCTION(cb_chunk_complete)
DEF_PRINT_FUNCTION(cb_reset)int main(int argc, char const *argv[])
{enum llhttp_errno err;llhttp_t parser;llhttp_settings_t settings;llhttp_settings_init(&settings);llhttp_init(&parser, HTTP_REQUEST, &settings);// 设置回调函数settings.on_protocol                         = cb_protocol                       ;settings.on_url                              = cb_url                            ;settings.on_status                           = cb_status                         ;settings.on_method                           = cb_method                         ;settings.on_version                          = cb_version                        ;settings.on_header_field                     = cb_header_field                   ;settings.on_header_value                     = cb_header_value                   ;settings.on_chunk_extension_name             = cb_chunk_extension_name           ;settings.on_chunk_extension_value            = cb_chunk_extension_value          ;settings.on_body                             = cb_body                           ;settings.on_message_begin                    = cb_message_begin                  ;settings.on_headers_complete                 = cb_headers_complete               ;settings.on_message_complete                 = cb_message_complete               ;settings.on_protocol_complete                = cb_protocol_complete              ;settings.on_url_complete                     = cb_url_complete                   ;settings.on_status_complete                  = cb_status_complete                ;settings.on_method_complete                  = cb_method_complete                ;settings.on_version_complete                 = cb_version_complete               ;settings.on_header_field_complete            = cb_header_field_complete          ;settings.on_header_value_complete            = cb_header_value_complete          ;settings.on_chunk_extension_name_complete    = cb_chunk_extension_name_complete  ;settings.on_chunk_extension_value_complete   = cb_chunk_extension_value_complete ;settings.on_chunk_header                     = cb_chunk_header                   ;settings.on_chunk_complete                   = cb_chunk_complete                 ;settings.on_reset                            = cb_reset                          ;// 要解析的HTTP请求报文  char request1[900] = \
"GET /example/example.html HTTP/1.1\r\n\
Host: www.baidu.com\r\n\
User-Agent: Mozilla/10.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/000000.1 Firefox/100.0\r\n\
Accept: image/avif,image/webp,*/*\r\n\
Accept-Language: zh-CN,en-US;q=0.7,en;q=0.3\r\n\
Accept-Encoding: gzip, deflate, br\r\n\
Referer: https://www.example.com/\r\n\
DNT: 1\r\n\
Connection: keep-alive\r\n\
Cookie: XXXX\r\n\
Sec-Fetch-Dest: image\r\n\
Sec-Fetch-Mode: no-cors\r\n\
Sec-Fetch-Site: same-origin\r\n\
Content-Length: 27\r\n\r\n\
field1=value1&field2=value2\r\n";int request_len1 = strlen(request1);// 执行解析err = llhttp_execute(&parser, request1, request_len1);if (err != HPE_OK) {fprintf(stderr, "出错了:[%s]\n", llhttp_errno_name(err));return 1;}return 0;
}

编译指令

gcc src/llhttp.c src/http.c src/api.c main.c -I ./inc -o excute.exe

输出

PS C:\Users\Administrator\Desktop\LLHTTP> .\excute.exe
cb_message_begin
cb_method : [GET]
cb_method_complete
cb_url : [/example/example.html]
cb_url_complete
cb_protocol : [HTTP]
cb_protocol_complete
cb_version : [1.1]
cb_version_complete
cb_header_field : [Host]
cb_header_field_complete
cb_header_value : [www.baidu.com]
cb_header_value_complete
cb_header_field : [User-Agent]
cb_header_field_complete
cb_header_value : [Mozilla/10.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/000000.1 Firefox/100.0]
cb_header_value_complete
cb_header_field : [Accept]
cb_header_field_complete
cb_header_value : [image/avif,image/webp,*/*]
cb_header_value_complete
cb_header_field : [Accept-Language]
cb_header_field_complete
cb_header_value : [zh-CN,en-US;q=0.7,en;q=0.3]
cb_header_value_complete
cb_header_field : [Accept-Encoding]
cb_header_field_complete
cb_header_value : [gzip, deflate, br]
cb_header_value_complete
cb_header_field : [Referer]
cb_header_field_complete
cb_header_value : [https://www.example.com/]
cb_header_value_complete
cb_header_field : [DNT]
cb_header_field_complete
cb_header_value : [1]
cb_header_value_complete
cb_header_field : [Connection]
cb_header_field_complete
cb_header_value : [keep-alive]
cb_header_value_complete
cb_header_field : [Cookie]
cb_header_field_complete
cb_header_value : [XXXX]
cb_header_value_complete
cb_header_field : [Sec-Fetch-Dest]
cb_header_field_complete
cb_header_value : [image]
cb_header_value_complete
cb_header_field : [Sec-Fetch-Mode]
cb_header_field_complete
cb_header_value : [no-cors]
cb_header_value_complete
cb_header_field : [Sec-Fetch-Site]
cb_header_field_complete
cb_header_value : [same-origin]
cb_header_value_complete
cb_header_field : [Content-Length]
cb_header_field_complete
cb_header_value : [27]
cb_header_value_complete
cb_headers_complete
cb_body : [field1=value1&field2=value2]
cb_message_complete
http://www.dtcms.com/a/395910.html

相关文章:

  • 2. 基于IniRealm的方式
  • 第三十四天:矩阵转置
  • MySQL执行计划:如何发现隐藏的性能瓶颈?
  • embedding多模态模型
  • ⚡ GitHub 热榜速报 | 2025 年 09 月 第 3 周
  • Synchronized的实现原理:深入理解Java线程同步机制
  • 初识C++、其中的引用、类(class)和结构体(struct)
  • Qt之常用控件之QWidget(四)
  • Pod生命周期
  • 【课堂笔记】复变函数-3
  • 深度学习-自然语言处理-序列模型与文本预处理
  • 【C语言】迭代与递归:两种阶乘实现方式的深度分析
  • CLIP多模态模型
  • 快手前端三面(准备一)
  • 前端-JS基础-day1
  • 【开题答辩全过程】以 J2EE在电信行业的应用研究为例,包含答辩的问题和答案
  • C++ QT Json数据的解析
  • RAG——动态护栏
  • Spring Boot 全局鉴权认证简单实现方案
  • 【靶场】webshop渗透攻击
  • 深入浅出现代GPU架构:核心类型、精度模式与选择
  • 开发避坑指南(53):git 命令行标签维护方法
  • javaEE初阶 网络编程(socket初识)
  • 基于Springboot + vue3实现的实验室研究生信息管理系统
  • TwinCat是什么
  • Linux 修炼:进程概念(下)
  • PostgreSQL 全表 count 优化实践:从 SeqScan 痛点分析到 heapam 改进与性能突破
  • 第17讲 机器学习vs神经网络
  • 1. 设计模式--工厂方法模式
  • SpringBoot常用配置