我在C中制作了一个套接字。这个程序通过命令行操作,在Linux上编译。它执行以下操作:
- 采用完整的URI和文件名
- 连接到服务器,检索页面并保存在指定的文件中
- 在获得远程数据之后。recv函数接收到的文件带有一个HEADER
我的问题是:
如何在fwrite()函数记录文件之前删除此HEADER。像字节到字节的代码一样,查找双线"\n\n"。
HTTP标头总是以rnrn
结尾。因此,您只想找到与之匹配的第一个字符串,并将位置增加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, "rnrn");
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客户端示例,请参阅此处。