300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > php 禁用 chunked chunked编码有关问题

php 禁用 chunked chunked编码有关问题

时间:2019-09-10 13:52:20

相关推荐

php 禁用 chunked chunked编码有关问题

chunked编码问题

PHP采集到的数据是chunked传输编码,gzip压缩格式的

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

响应头信息:

Array

(

[0]=>HTTP/1.1200OK

[1]=>Server:Dict/34002

[2]=>Date:Wed,17Dec06:49:22GMT

[3]=>Content-Type:text/html;charset=utf-8

[4]=>Transfer-Encoding:chunked

[5]=>Connection:keep-alive

[6]=>Keep-Alive:timeout=60

[7]=>Cache-Control:private

[8]=>Last-Modified:Wed,17Dec04:57:49GMT

[9]=>Expires:Wed,17Dec06:49:22GMT

[10]=>Set-Cookie:uvid=VJEncoTSVYJC;expires=Thu,31-Dec-3723:55:55GMT;domain=.;path=/

[11]=>Content-Encoding:gzip

)

if($this->response_num==200)

{

if($this->is_chunked)

{

//读取chunk头部信息,获取chunk主体信息的长度

$chunk_size=(int)hexdec(fgets($this->conn));

//

while(!feof($this->conn)&&$chunk_size>0)

{

//读取chunk头部指定长度的信息

$this->response_body.=fread($this->conn,$chunk_size);

fseek($this->conn,2,SEEK_CUR);

$chunk_size=(int)hexdec(fgets($this->conn,4096));

}

}

else

{

$len=0;

//读取请求返回的主体信息

while($items=fread($this->conn,$this->response_body_length))

{

$len=$len+strlen($items);

$this->response_body=$items;

//当读取完请求的主体信息后跳出循环,不这样做,貌似会被阻塞!!!

if($len>=$this->response_body_length)

{

break;

}

}

}

if($this->is_gzip)

{

$this->response_body=gzinflate(substr($this->response_body,10));

}

$this->getTrans($this->response_body);

}

基本上每次都会出现这个提示:

Warning:gzinflate():dataerrorinE:\CodeEdit\php\http\dict.phponline384

偶尔能正常解析,应该是chunked解码有问题,查看过一些资料,也变换过集中解码方式,但还是功亏一篑

------解决思路----------------------

你可用gzdecode解码

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。