php curl如何得到HTTP chunked response中chunked data size?

lingyue1012 2012-07-05 02:13:51

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

...全文
586 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq120848369 2012-07-05
  • 打赏
  • 举报
回复
就是个Content的数据封装格式。

一个16进制的长度\r\n
一段数据\r\n
一个16进制的长度\r\n
一段数据\r\n
一个16进制的长度\r\n
一段数据\r\n
0\r\n
\r\n

curl已经把这些数据解开串到一起了,你自己解析就是先找第一个\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 received

mixed curl_getinfo ( resource $ch [, int $opt = 0 ] )
用这个函数得到这俩值,相减就是原始response里的总body长度,而真正数据穿起来多长就是returntransfer的数据长度了。
foolbirdflyfirst 2012-07-05
  • 打赏
  • 举报
回复
呵呵,curl是比较智能,平常工作多用curl,想详细了解协议还是得自己构建解析http协议。
lingyue1012 2012-07-05
  • 打赏
  • 举报
回复
怪不得我自己用socket写的一个函数有长度呢
lingyue1012 2012-07-05
  • 打赏
  • 举报
回复
哦。。curl已经解码了。原来如此呀,明白啦。。谢谢!笨鸟先飞?。。。
foolbirdflyfirst 2012-07-05
  • 打赏
  • 举报
回复
了解Transfer-Encoding:chunked协议是什么意思,以及返回的http body是什么样的格式,问题基本就解决得七七八八了。
你看看
http://topic.csdn.net/u/20110109/18/5f164cba-5b24-4497-96de-1a0f06ba84ab.html
我的回帖,有代码的。
lingyue1012 2012-07-05
  • 打赏
  • 举报
回复
查遍了curl的opt貌似没有,不过强大的curl居然没有? 还是有其他方法呢?

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧