chunked 是http传输过程中常用的一种分块手段, 这里是对chunked数据的简易处理方法,主要是拼接block, 去掉块大小和回车信息即可
static ResponseStream *rlib_parse_chunk_data(char *lp_chunk_data, intptr_t nsize)
{
auto pstream = new ResponseStream(Utility::round_up_8(nsize));
if (pstream == nullptr) {
return pstream;
} //if
// to small data size, just ignore it
if (nsize < 16){
pstream->Write(lp_chunk_data, nsize);
} else {
// get chunked data size
const int crlf = RLIB_COUNTOF_STR("\r\n");
int block_size = 0;
LPSTR pDataEnd = lp_chunk_data + nsize;
LPSTR pBlockDataBegin = lp_chunk_data, pBlockDataEnd = lp_chunk_data;
while (pBlockDataBegin < pDataEnd) {
pBlockDataEnd = strstr(pBlockDataBegin, "\r\n");
if (pBlockDataEnd == nullptr) {
trace(!"invalid chunked data");
break;
}
//pBlockDataEnd[0] = '\0';
block_size = Int32::TryParse(pBlockDataBegin, 16);
//pBlockDataEnd[0] = '\r';
if (block_size <= 0) {
break;
} //if
pstream->Write(pBlockDataEnd + crlf, block_size);
pBlockDataBegin = pBlockDataEnd + crlf + block_size + crlf;
// skip CRLF
// crlf = 0;
// while (*pBlockDataBegin == '\r' || *pBlockDataBegin == '\n') {
// ++crlf;
// ++pBlockDataBegin;
// }
}
} //if
pstream->Position = 0;
return pstream;
}
该博客介绍了如何在C++中解析HTTP Chunked传输的数据,通过读取块大小,跳过回车换行符,并将块内容拼接到一起。主要内容包括对chunked数据的处理方法,特别关注数据的正确提取和有效载荷的合并。
7万+

被折叠的 条评论
为什么被折叠?



