我试用“\r\n\r\n”两个回车换行来分开,但是我发现有时存在两个回应头在回应包中,导致最后一个
头被包含在我得到的数据区中。如下:
HTTP/1.1 200 OKDate: Fri, 26 Nov 2004 08:07:20 GMTServer: Apache/1.3.26 (Unix) PHP/4.2.0 mod_gzip/1.3.19.1a mod_fastcgi/2.2.10Last-Modified: Thu, 25 Nov 2004 04:52:31 GMTETag: "90040-11e7-41a5650f"Accept-Ranges: bytesKeep-Alive: timeout=15, max=100Connection: Keep-AliveContent-Type: text/htmlContent-Encoding: gzipContent-Length: 1326? ? ? LD PCD 薒_v w € j j HTTP/1.1 200 OKDate: Fri, 26 Nov 2004 08:07:20 GMTServer: Apache/1.3.26 (Unix) PHP/4.2.0 mod_gzip/1.3.19.1a mod_fastcgi/2.2.10Last-Modified: Thu, 25 Nov 2004 04:52:31 GMTETag: "90040-11e7-41a5650f"Accept-Ranges: bytesKeep-Alive: timeout=15, max=100Connection: Keep-AliveContent-Type: text/htmlContent-Encoding: gzipContent-Length: 1326
我也试用“content-type:”来作为最后的区分标志,但是我发现当我用web email时,好像有的请求头
中并不包含“content-type”,请问一下各位高手,到底http的头和数据区的鲁棒性分开标志是什么啊?谢谢各位高手了,分不够可以再加!!谢谢了,在线急等。
你是不是抓了两个重复的response ?
sscanf(buf,"%[^\r\n]\r\n",head);
如果读到"\x0d\x0a"但是没数据 说明HTTP头就结束了
接下去就是HTTP实体数据了 至于数据的长度
一般的要根据Content-Length来判断
如果Transfer-Encoding为chunked那就稍复杂点
你只使用那么简单的方法来解析HTTP怎么行呢http://53x4h0lic.vicp.net
这是我写的HTTP服务器 类似于APACHE
还有些函数封装了HTTP读的功能(你要的话我可以提供SDK)
很容易就可以实现通过HTTP下载的功能