php,从fsockopen结果,如何删除分块数据并获取数据

时间:2011-02-11 07:10:42

标签: php fsockopen

响应的结果就像这样

HTTP/1.1 200 OK
Date: Fri, 11 Feb 2011 06:59:47 GMT
Server: Apache
Set-Cookie: id%22%3Bs%3A32%3A%223c38c56b3def2530014336c922ee0bfc%22%3Bs%3A10%3A%22ip_address%22%3Bs%3A14%3A%2269.162.119.226%22%3Bs%3A10%3A%22user_agent%22%3Bs%3A0%3A%22%22%3Bs%3A13%3A%22last_activity%22%3Bs%3A10%3A%221297407587%22%3B%7Dcd356ca12b8d395b49603cb3eb34f786; expires=Fri, 11-Feb-2011 08:59:47 GMT; path=/ Set-Cookie: vaave_session=a%3A3Bs%3A32%3A%223c38c56b3def2530014336c922ee0bfc%22%3Bs%3A10%3A%22ip_address%22%3Bs%3A14%3A%2269.162.119.226%22%3Bs%3A10%3A%22user_agent%22%3Bs%3A0%3A%22%22%3Bs%3A13%3A%22last_activity%22%3Bs%3A10%3A%221297407587%22%3Bs%3A2%3A%22tz%22%3Bs%3A13%3A%22Asia%2FCalcutta%22%3B%7Daadf6cb5ad21eae3c04e24cf00b3ea16; expires=Fri, 11-Feb-2011 08:59:47 GMT; path=/ 
Connection: close
Transfer-Encoding: chunked

"data here"

1 个答案:

答案 0 :(得分:0)

数据以“块”传输,即在其长度之前的字节块。引用维基百科的example

HTTP/1.1 200 OK
Content-Type: text/plain
Transfer-Encoding: chunked

25
This is the data in the first chunk

1C
and this is the second one

3
con
8
sequence
0

这里唯一相关的标题是Transfer-Encoding: chunked。你会看到第一行有一个十六进制数字。这告诉你在下面的块中预期有多少字节 - 十六进制中的25是十进制的37,当然,在37个字符之后有一个换行符,接着是另一个带有下一个块的字节数的十六进制数,依此类推,直到结束 - 最后一个块大小必须为0,表示数据结束。 (块大小不是内容的一部分)。解码后的消息是:

This is the data in the first chunk
and this is the second one
consequence

编辑:似乎PECL中存在一个现有函数,http_chunked_decode() - 并且在该页面上也有一个纯PHP实现 - 只需将它传递给分块数据,它将尝试“unchunk “它。