当WinInet接受到一个有“Transfer-Encoding: chunked”头域的http后,怎么直接获取该http包实体的长度?而不是读取数据后才得到实体长度。有“Transfer-Encoding: chunked”头域的http包,没有“content-length”域。

解决方案 »

  1.   

    不能获取总的数据大小,但你能获取这次message的body的大小,即body第一行的数字,这是http协议的规定。
      

  2.   

    "Transfer-Encoding: chunked"了解一下chunked编码格式就知道了
    先取得chunk的标题:正文数量+空格+数量单位(一般省略)+CRLF(=='\r\n')
    一般正文数量就是chunk的正文的长度(因为数量单位一般都是省略掉)
    注意正文数量是16进制的,用strtol(16进制字符串,NULL,16)就可以转换然后根据取得的长度读取chunk的正文// 循环知道正文长度为0注意点:  按正文数量读取正文后,并不马上就是下个chunk的标题,会有一个 CRLF全部chunk读完以后,后面可能会有footer(一般情况下是空行)
    如果你Connection: Keep-Alive来多次连续发请求并读取数据的话,footer处理需要考虑进去
    如果是每一次请求都是重新建立连接的话,可以忽略
      

  3.   


    如果用 WININET,这些需要自己关心吗?WININET应该帮你做了