今天在干坏事抓取别人页面时候遇到一个问题,平时我们在post数据后,大不了要求提交cookie,但是今天这个测试了N遍不需要coookie都行的,但是抓取到的始终是乱码,怎么解析都不行。于是自己又把cookie和一大堆header给加上,还是同样的问题,于是开始郁闷了。PHP脚本不行,但是同样的提交浏览器上面就行,这个是怎么回事呢?
于是开始分析能看到的数据,终于看到一个特别的地方,我们平时请求数据的时候都会在header里面看到一个
Coontent-Length: xxxx
这个是表示这次发送的数据的长度,说明是一个完整的http数据的发送,但是今天看到的这个却没有这一项,出现的却是
Transfer-Encoding chunked
于是开始郁闷了,这个到底是啥意思。谷歌了一番终于懂了,也找到对策了。
维基百科上面是这样解释的:
分块传输编码(Chunked transfer encoding)是超文本传输协议(HTTP)中的一种服务器可以发送数据而不需要预先知道发送内容的总大小。通常数据块的大小是一致的,但也不总是这种情况。
终于知道这个是啥了,那边把数据给分段了,怪不得数据一直有问题,于是网上到处找解决办法,终于找到一个很巧妙的方法:使用HTTP 1.0协议,服务器会主动放弃chunked编码,所以在curl里面加个
curl_setopt($curl, CURLOPT_HTTP_VERSION, '1.0');
问题就解决了,就是这么简单