在C ++中从Header中分离HTTP响应主体

时间:2010-12-29 06:15:15

标签: c++ http-headers

我正在为某个项目编写自己的C ++ HTTP类。而我正试图找到一种方法将响应体与标题分开,因为这是我需要返回的唯一部分。

以下是原始http标头的示例,如果您不熟悉它:

HTTP/1.1 200 OK
Server: nginx/0.7.65
Date: Wed, 29 Dec 2010 06:13:07 GMT
Content-Type: text
Connection: keep-alive
Vary: Cookie
Content-Length: 82

下面是HTML / Response正文。最好的方法是什么?我只是按顺序使用Winsock库(我甚至认为这不重要)。

提前致谢。

3 个答案:

答案 0 :(得分:20)

HTTP标头由序列\r\n\r\n(空行)终止。只需搜索,然后返回所有内容。 (当然,它可能不存在,例如,如果它是对HEAD请求的回应。)

答案 1 :(得分:2)

你需要自己动手吗?有用于做HTTP的C / C ++库,例如libcurl。如果您需要支持HTTP的全部范围,那么它并不总是简单的描述。例如,您可能还需要提供分块编码。

答案 2 :(得分:0)

DO IF Socket.IsServerReady(Sock)THEN Text = text + Socket.Read(Sock,65000)'print text''32000 bytes ...无论它们给我们什么Bytes = bytes + Socket.Transferred StatusBar.Panel(0 ).Caption =“字节读取:”+ STR $(字节)

END IF

'RichEdit.addstrings text zzz = Bytes LOOP UNTIL Socket.Transferred = 0 RichEdit.Clear RichEdit.Text = text Socket.Close(Sock)dim mem as qmemorystream dim S $ as string S $ = text for n = 0 to 400 buff $ = mid $(S $,n,5)

如果buff $ =“alive”则'找到标题的结尾richedit1.addstrings(buff $)richedit1.addstrings(mid $(S $,n,9))richedit1.addstrings str $(n + 9)zzz =标题之后的n + 8'offset + 8位空格和Bof结束之前如果下一个n Mem.WriteStr(S $,LEN(S $))'将整个文件写入内存Mem.Position = zzz'使用偏移作为起始位置S $ = Mem.ReadStr(LEN(S $))'将剩余的文件读入字符串,直到Eof Mem.Close'别忘了关闭'PRINT S $''打印它

Filex.Open(“c:/CAP.AVI”,fmCreate)'在系统文件上创建文件.WriteBinStr(S $,len(S $) - zzz)'写入文件file..close'别忘了关闭