如何删除这个HTTP头?

Maz*_*999 1 c sockets http http-headers

我用C做了一个socket。这个程序是通过命令行操作的,在Linux上编译的。它执行以下操作:

  • 采用完整的 URI 和文件名
  • 连接到服务器,检索页面并保存在指定文件中。
  • 获取远程数据后。由recv函数接收到的文件带有一个HEADER。

我的问题是:

如何在fwrite()函数记录文件之前去掉这个HEADER。就像字节到字节的代码一样,要找到双行“\n\n”。

Ari*_*ite 5

HTTP 标头始终以\r\n\r\n. 因此,您只想找到第一个匹配的字符串,并将位置增加 4 个字节。

strstr() 函数

strstr()函数(在 中找到string.h)就是这样做的:

char * strstr(const char *str1, const char *str2);
Run Code Online (Sandbox Code Playgroud)

str2您要在 中搜索的字符串在哪里str1

它将内存位置返回到第一个匹配项的开头。如果未找到该字符串,则返回NULL

例子

因此,如果您假设缓冲区大于标头:

char *buf = getHTTPResponse(url); // Get HTTP response from URL
char *content = strstr(buf, "\r\n\r\n");
if (content != NULL) {
    content += 4; // Offset by 4 bytes to start of content
}
else {
    content = buf; // Didn't find end of header, write out everything
}

// Write out content to file
Run Code Online (Sandbox Code Playgroud)

有关使用 C 语言的完整 HTTP 客户端示例,请参阅此处strstr()