如何删除此HEADER HTTP?

时间:2015-06-23 18:38:02

标签: c sockets http http-headers

我在C中创建了一个套接字。该程序由命令行操作并在Linux上编译。它执行以下操作:

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

我的问题是:

如何在fwrite()函数记录文件之前删除此HEADER。 像一个字节到字节的代码,找到一个双线" \ n \ n"。

1 个答案:

答案 0 :(得分:3)

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

strstr()函数

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

char * strstr(const char *str1, const char *str2);

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

有关使用strstr()的C中的完整HTTP客户端示例,请参阅here