• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

chunked编码有关问题

php 搞代码 3年前 (2022-01-24) 10次浏览 已收录 0个评论

chunked编码问题
PHP采集到的数据是chunked传输编码,gzip压缩格式的
chunk编码的思路貌似是:将数据分块传输,每一块分为头部和主体字段,头部包含主体信息的长度且以16进制表示,头部和主体以回车换行符分隔,最后一块以单行的0表示分块结束。。

响应头信息:

<br /><br />Array<br />(<br />    [0] => HTTP/1.1 200 OK<br /><br />    [1] => Server: Dict/34002<br /><br />    [2] => Date: Wed, 17 Dec 2014 06:49:22 GMT<br /><br />    [3] => Content-Type: text/html; charset=utf-8<br /><br />    [4] => Transfer-Encoding: chunked<br /><br />    [5] => Connection: keep-alive<br /><br />    [6] => Keep-Alive: timeout=60<br /><br />    [7] => Cache-Control: private<br /><br />    [8] => Last-Modified: Wed, 17 Dec 2014 04:57:49 GMT<br /><br />    [9] => Expires: Wed, 17 Dec 2014 06:49:22 GMT<br /><br />    [10] => Set-Cookie: uvid=VJEncoTSVYJC; expires=Thu, 31-Dec-37 23:55:55 GMT; domain=.dict.cn; path=/<br /><br />    [11] => Content-Encoding: gzip<br /><br />)<br /><br />
<br /><br />if($this->response_num==200)<br />        {<br />			if($this->is_chunked)<br />			{<br />				//读取chunk头部信息,获取chunk主体信息的长度<br />				$chunk_size = (int)hexdec(fgets($this->conn));<br />				//<br />				while(!feof($this->conn) && $chunk_size > 0) <br />				{ <br />					//读取chunk头部指定长度的信息<br />					$this->response_body .= fread( $this->conn, $chunk_size ); <br />					fseek($this->conn, 2, SEEK_CUR);<br />					$chunk_size = (int)hexdec(fgets( $this->conn,4096)); <br />			   } <br />			}<br />			else<br />			{<br />				$len=0;<br />				//读取请求返回的主体信息<br />				while($items = fread($this->conn, $this->response_body_length))<br />				{<br />					$len = $len+strlen($items);<br />					$this->response_body = $items;<br />					<br />					//当读取完请求的主体信息后跳出循环,不这样做,貌似会被阻塞!!!<br />					if($len >= $this->response_body_length)<br />					{<br />						break;<br />					}<br />				}<br />			}<br />			<b style="color:transparent">来&源gao@dai!ma.com搞$代^码%网</b><img>搞gaodaima代码</img><br />            if($this->is_gzip)<br />            {<br />                $this->response_body = gzinflate(substr($this->response_body,10));<br />            }<br />			<br />			$this->getTrans($this->response_body);<br /><br />        }<br />

基本上每次都会出现这个提示:
Warning: gzinflate(): data error in E:\CodeEdit\php\http\dict.php on line 384
偶尔能正常解析,应该是chunked解码有问题,查看过一些资料,也变换过集中解码方式,但还是功亏一篑
——解决思路———————-
你可用 gzdecode 解码


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:chunked编码有关问题
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址