【发布时间】:2012-07-22 04:51:31
【问题描述】:
我正在开发一个需要解析 Chunked-type HTTP 传输的客户端。我已经拼命想通过以下内容找出错误,如果有人能够更快地发现我的错误,我将不胜感激。总结一下这个问题:似乎客户端没有收到所有的块,从而搞砸了剩下的过程。提前致谢!
while(cflag){
pfile_chunk = malloc(CHUNK_SIZE+1);
memset(pfile_chunk, 0, CHUNK_SIZE);
cPtr = pfile_chunk;
cPtr2 = NULL;
k=0;
while(*(cPtr-1) != '\n'){
k++;
recv(sock, cPtr, 1, 0);
cPtr = pfile_chunk+k;
}
cPtr2 = strchr(pfile_chunk, '\r');
*cPtr2 = '\0';
sscanf(pfile_chunk, "%x", &l);
if(l == 0)
break;
printf("\nServer wants to deliver %ld bytes.\n", l);
pfile_chunk = realloc(pfile_chunk, l+1);
memset(pfile_chunk, 0, l);
recv(sock, pfile_chunk, l, 0);
fputs(pfile_chunk, f);
printf("GOT THIS, SIZE %ld:\n%s\n", strlen(pfile_chunk), pfile_chunk);
//get next \r\n bytes.
recv(sock, NULL, 2, 0);
}
【问题讨论】:
-
我为草率的代码提前道歉,这或多或少是我尝试了许多不同的事情的结果。
-
您介意发布您的最终清理代码吗?我也在为这项任务而苦苦挣扎。不确定如何协调从缓冲区读取的内容与实际的 HTTP 块。在解析块之前是否存储了整个 HTTP 响应?
标签: c http chunked-encoding transfer-encoding http-chunked