php 禁用 chunked,chunked编码有关问题

chunked编码问题

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

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

响应头信息:

Array

(

[0] => HTTP/1.1 200 OK

[1] => Server: Dict/34002

[2] => Date: Wed, 17 Dec 2014 06:49:22 GMT

[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, 17 Dec 2014 04:57:49 GMT

[9] => Expires: Wed, 17 Dec 2014 06:49:22 GMT

[10] => Set-Cookie: uvid=VJEncoTSVYJC; expires=Thu, 31-Dec-37 23:55:55 GMT; domain=.dict.cn; 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(): data error in E:\CodeEdit\php\http\dict.php on line 384

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

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

你可用 gzdecode 解码

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值