我正在为某个项目编写自己的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库(我甚至认为这不重要)。
提前致谢。
答案 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'别忘了关闭