项目需要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)
{