http多chunk報文C 解析

2021-07-09 06:15:59 字數 2562 閱讀 2414

專案需要c++實現http報文的收發,網上找了下發現沒有合適的,自己動手寫了個。

可解析如下兩類報文:

1.乙個報文包含多個chunk

2.乙個chunk包含在多個報文中(極端情況下,乙個報文只含有乙個位元組)

**如下:

//解析函式

//狀態跳轉,設定狀態

ptask->m_head_processing = false;

ptask->m_length_processing = true;

ptask->m_length_info_start_pos = ptask->h_len;//指向頭部的下乙個位置

//log(info, "head process success m_length_info_start_pos:%u, m_len:%u", ptask->m_length_info_start_pos,ptask->m_len);

// printbuff(ptask->m_buf,ptask->m_len,ptask);

}

//log(info, "data_len:%u", data_remain_len);

if(0 >= data_remain_len || null == data_remain_start)

if(ptask->m_length_processing)

int tmplen = data_remain_len;

data_remain_len = (ptask->m_buf + ptask->m_len) - (strstr(ptask->m_buf+ptask->m_length_info_start_pos, "\r\n") + 2);

data_remain_start += (tmplen - data_remain_len);

if(null == data_remain_start || data_remain_len < 0)

return false; //http資料錯誤,不再處理,還沒到資料部分,無需儲存到jsonbuf

//data_remain_start += 2;

//data_remain_len -= (data_remain_start-ptmp);

//if(data_remain_len < 0)

// return false;//http資料錯誤,不再處理

ptask->m_length_processing = false;

ptask->m_chunk_processing = true;

ptask->m_chunk_copyed = 0;

// log(info, "length_processing success data_remain_len:%d chunk_len:%u", data_remain_len, ptask->m_chunk_len);

}else

}if(ptask->m_chunk_processing)

else

ptask->m_chunk_copyed += copy_size;

ptask->m_buff_copy_len += copy_size;

data_remain_len -= copy_size;

data_remain_start += copy_size;

// log(info, "chunk_processing data_remain_len:%d", data_remain_len);

if(copy_size == chunk_data_remain_len)

else

}if(ptask->m_linefeed_processing)

log(info, "linefeed processing ,recving the next packet");

return false;

}//輔助函式

HTTP報文解析

超文字傳輸協議 hypertext transfer protocol,簡稱http 是應用層協議。http 是一種請求 響應式的協議,即乙個客戶端與伺服器建立連線後,向伺服器傳送乙個請求 伺服器接到請求後,給予相應的響應資訊。http請求報文分為三部分 請求行 請求頭部 請求包體 由方法字段 ur...

HTTP特點與報文解析

http允許傳輸任意型別的物件 正在傳輸的型別有content type content type是http包中用來表示內容型別的標識 加以標記 無連線的含義是限制每次連線只處理乙個請求 伺服器處理完客戶的請求,並收到客戶的應答後,即斷開連線 採用這種方式可以節省傳輸時間 http是無狀態協議 無狀...

HTTP的報文格式解析

http報文是面向文字的,報文中每乙個欄位都是一些ascii碼串,各個欄位的長度是不確定的。http有兩類報文 請求報文 響應報文 乙個http請求報文由 四部分組成 a 請求行 請求行由請求方法字段 url欄位和http協議版本字段,組成,它們用空格分隔,例如 get index.html htt...