http多chunk报文C++解析

本文介绍了一个C++项目中实现HTTP报文收发的情况,特别是针对包含多个chunk和chunk跨多个报文的解析。提供了`ParseHttpData`和`CheckEnd`两个关键函数的代码片段,用于处理此类报文解析问题。
摘要由CSDN通过智能技术生成

项目需要C++实现http报文的收发,网上找了下发现没有合适的,自己动手写了个。
可解析如下两类报文:
1.一个报文包含多个chunk
2.一个chunk包含在多个报文中(极端情况下,一个报文只含有一个字节)
代码如下:
//解析函数
bool HttpPost::ParseHttpData(HttpTask* pTask, const char *recv_data, int recv_len)
{
// log(Info, “ParseHttpData recv_len:%u”, recv_len);
int data_remain_len = recv_len; //报文的剩余数据
const char* data_remain_start = recv_data;//报文剩余数据的起始位置

if(pTask->m_head_processing)
{   
    //log(Info, "head_processing");
    if(pTask->res < 0)
    {   
        const char* rsp = strstr(pTask->m_buf, "HTTP/1.1");
        if (rsp == NULL || !CheckEnd(rsp + 8, pTask->m_buf + (pTask->m_len-1)))
        {   
            log(Info, "httpcode:: NO Http Head CODE");
            return false;
        }   
        pTask->res = atoi(rsp + 8); 
        log(Info, "pTask->res:%u", pTask->res);
    }   

    int pos = -1; 
    for(int i=0; i<pTask->m_len-3; i++)
    {   
        if(pTask->m_buf[i] == '\r' && pTask->m_buf[i+1] == '\n' && pTask->m_buf[i+2] == '\r' && pTask->m_buf[i+3] == '\n')
        {   
            pos = i+4;
            break;
        }   
    }   
    if(pos < 0)
    {   
  
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值