问题描述
我在下面做了此代码,以下载大文件并将其保存到文件中。 (我删除了不重要的部分)
int nDataLength;
int i = 0;
static char buffer[4096];
while ((nDataLength = recv(Socket,buffer,sizeof(buffer),NULL)) > 0)
{
//MessageBoxA(0,std::to_string(nDataLength).c_str(),"TEST",0);
fwrite(buffer,nDataLength,1,pFile);
}
现在,它保存文件,但也保存HTTP标头。现在我真的不知道如何从接收到的数据中剥离标题。
如果足够小,我可以从缓冲区读取Content-Length,然后再次打开文件并删除标头,但这不是选项,因为缓冲区将被新数据覆盖。
我也不能使用其他库,例如libcurl等。
编辑:
char* content = strstr(buffer,"\r\n\r\n");
if (content != NULL) {
content += 4;
fwrite(content,pFile);
}
else
{
fwrite(buffer,pFile);
}
解决方法
好的,我想出了在保存之前剥离标题的函数。
int nDataLength;
int i = 0;
static char buffer[4096];
while ((nDataLength = recv(Socket,buffer,sizeof(buffer),NULL)) > 0)
{
char* content = strstr(buffer,"\r\n\r\n");
if (content != NULL) {
std::string s2(buffer);
size_t p = s2.find("\r\n\r\n");
fwrite(buffer+p+4,nDataLength-p-4,1,pFile);
}
else
{
fwrite(buffer,nDataLength,pFile);
}
}