php抓取数据遇到Transfer-Encoding chunked

今天在干坏事抓取别人页面时候遇到一个问题,平时咱们在post数据后,大不了要求提交cookie,可是今天这个测试了N遍不须要coookie都行的,可是抓取到的始终是乱码,怎么解析都不行。因而本身又把cookie和一大堆header给加上,仍是一样的问题,因而开始郁闷了。PHP脚本不行,可是一样的提交浏览器上面就行,这个是怎么回事呢?
因而开始分析能看到的数据,终于看到一个特别的地方,咱们平时请求数据的时候都会在header里面看到一个php

Coontent-Length: xxxx

这个是表示此次发送的数据的长度,说明是一个完整的http数据的发送,可是今天看到的这个却没有这一项,出现的倒是html

Transfer-Encoding	chunked

因而开始郁闷了,这个究竟是啥意思。谷歌了一番终于懂了,也找到对策了。
维基百科上面是这样解释的:浏览器

分块传输编码(Chunked transfer encoding)是超文本传输协议(HTTP)中的一种数据传输机制,容许HTTP由网页服务器发送给客户端应用( 一般是网页浏览器)的数据能够分红多个部分。分块传输编码只在HTTP协议1.1版本(HTTP/1.1)中提供。
一般,HTTP应答消息中发送的数据是整个发送的,Content-Length消息头字段表示数据的长度。数据的长度很重要,由于客户端须要知道哪里是应答消息的结束,以及后续应答消息的开始。然而,使用分块传输编码,数据分解成一系列数据块,并以一个或多个块发送,这样服务器能够发送数据而不须要预先知道发送内容的总大小。一般数据块的大小是一致的,但也不老是这种状况。
服务器

终于知道这个是啥了,那边把数据给分段了,怪不得数据一直有问题,因而网上处处找解决办法,终于找到一个很巧妙的方法:使用HTTP 1.0协议,服务器会主动放弃chunked编码,因此在curl里面加个cookie

curl_setopt($curl, CURLOPT_HTTP_VERSION, '1.0');

问题就解决了,就是这么简单app

相关文章
相关标签/搜索