我试用“\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的头和数据区的鲁棒性分开标志是什么啊?谢谢各位高手了,分不够可以再加!!谢谢了,在线急等。

解决方案 »

  1.   

    使用两个\r\n判断是对的呀,怎么会有两个http包头呢?
    你是不是抓了两个重复的response ?
      

  2.   

    我这样做为何错?
    sscanf(buf,"%[^\r\n]\r\n",head);
      

  3.   

    HTTP协议定义"\x0d\x0a" 为一行的结尾
    如果读到"\x0d\x0a"但是没数据 说明HTTP头就结束了
    接下去就是HTTP实体数据了 至于数据的长度
    一般的要根据Content-Length来判断 
    如果Transfer-Encoding为chunked那就稍复杂点
    你只使用那么简单的方法来解析HTTP怎么行呢http://53x4h0lic.vicp.net
    这是我写的HTTP服务器 类似于APACHE
    还有些函数封装了HTTP读的功能(你要的话我可以提供SDK)
    很容易就可以实现通过HTTP下载的功能
      

  4.   

    会不会是 Client ->  Server1 , Server1 -> Server2 呵呵