如何从使用 c++ 中的 recv 接收的数据中删除 header?
How to Strip the header from data received using recv in c++?
我在下面制作了这段代码来下载大文件并将其保存到文件中。 (我删除了不重要的部分)
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 header。现在我真的不知道如何从收到的数据中删除 header。
如果它足够小,我可以从缓冲区读取 Content-Length,然后再次打开文件并删除 header,但这不是选项,因为缓冲区将被新数据覆盖。
我也不能使用其他库,如 libcurl 等
编辑:
char* content = strstr(buffer, "\r\n\r\n");
if (content != NULL) {
content += 4;
fwrite(content, nDataLength, 1, pFile);
}
else
{
fwrite(buffer, nDataLength, 1, pFile);
}
好的,我想到了在保存之前去除 header 的函数。
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, 1, pFile);
}
}
我在下面制作了这段代码来下载大文件并将其保存到文件中。 (我删除了不重要的部分)
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 header。现在我真的不知道如何从收到的数据中删除 header。
如果它足够小,我可以从缓冲区读取 Content-Length,然后再次打开文件并删除 header,但这不是选项,因为缓冲区将被新数据覆盖。
我也不能使用其他库,如 libcurl 等
编辑:
char* content = strstr(buffer, "\r\n\r\n");
if (content != NULL) {
content += 4;
fwrite(content, nDataLength, 1, pFile);
}
else
{
fwrite(buffer, nDataLength, 1, pFile);
}
好的,我想到了在保存之前去除 header 的函数。
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, 1, pFile);
}
}