curl向一个网站post数据时,可以得到相应的响应头(header)和响应体(body),响应体的传输编码(Transfer-Encoding)是区块格式(chunked)。怎么得到http区块应答(HTTP chunked response)中的数据大小(Chunk size)?

解决方案 »

  1.   

    查遍了curl的opt貌似没有,不过强大的curl居然没有? 还是有其他方法呢?
      

  2.   

    了解Transfer-Encoding:chunked协议是什么意思,以及返回的http body是什么样的格式,问题基本就解决得七七八八了。
    你看看
    http://topic.csdn.net/u/20110109/18/5f164cba-5b24-4497-96de-1a0f06ba84ab.html
    我的回帖,有代码的。
      

  3.   

    哦。。curl已经解码了。原来如此呀,明白啦。。谢谢!笨鸟先飞?
      

  4.   

    怪不得我自己用socket写的一个函数有长度呢
      

  5.   

    呵呵,curl是比较智能,平常工作多用curl,想详细了解协议还是得自己构建解析http协议。
      

  6.   

    就是个Content的数据封装格式。一个16进制的长度\r\n
    一段数据\r\n
    一个16进制的长度\r\n
    一段数据\r\n
    一个16进制的长度\r\n
    一段数据\r\n
    0\r\n
    \r\ncurl已经把这些数据解开串到一起了,你自己解析就是先找第一个\r\n\r\n,后面就是body,然后顺次找\r\n得到一个长度,然后往后读这么长的数据,然后掠过\r\n。循环这个过程,一直到遇到长度0就不用再解析了。实际整个body的长度可以curl这样做:
    CURLINFO_SIZE_DOWNLOAD - Total number of bytes downloaded
    URLINFO_HEADER_SIZE - Total size of all headers receivedmixed curl_getinfo ( resource $ch [, int $opt = 0 ] )
    用这个函数得到这俩值,相减就是原始response里的总body长度,而真正数据穿起来多长就是returntransfer的数据长度了。