抓取网页数据php(PHP脚本不行传输编码(Chunkedtransfer)中的一种机制)

优采云 发布时间: 2022-04-04 04:14

  抓取网页数据php(PHP脚本不行传输编码(Chunkedtransfer)中的一种机制)

  今天在做坏事爬别人的页面时遇到了一个问题。通常,在我们发布数据后,要求提交 cookie 是一件大事。但是今天这个测试N次没有cookies,但是爬取总是乱码,为什么?解析不起作用。所以我加了cookies和很多headers,还是一样的问题,开始郁闷了。PHP 脚本不起作用,但同样的提交到浏览器会起作用。这是怎么回事?

  于是开始分析我们能看到的数据,终于看到了一个特别的地方。我们平时请求数据的时候,会在header中看到一个php。

  Coontent-Length: xxxx

  这是本次发送的数据长度,说明是完整的http数据传输,但是今天看到的没有这个项目,而是出现了html。

  Transfer-Encoding chunked

  于是我开始感到沮丧,这是什么意思。谷歌了一下,终于明白了,找到了解决办法。

  维基百科是这样解释的:浏览器

  分块传输编码是超文本传输​​协议 (HTTP) 中的一种数据传输机制,它允许将 Web 服务器发送到客户端应用程序(通常是 Web 浏览器)的 HTTP 数据分成多个部分。分块传输编码仅适用于 HTTP 协议 1.1 版本(HTTP/1.1).

  一般情况下,HTTP响应消息中发送的数据是完整发送的,Content-Length消息头域表示数据的长度。数据的长度很重要,因为客户端需要知道回复消息的结束位置和后续回复消息的开始位置。但是,使用分块传输编码,数据被分解成一系列数据块并以一个或多个块的形式发送,这样服务器就可以发送数据,而无需提前知道内容的总大小。通常数据块的大小是一致的,但并非总是如此。服务器

  我终于知道这是什么了,数据在那边被分割了。难怪数据总是有问题,于是在网上到处寻找解决办法,终于找到了一个很巧妙的方法:使用HTTP1.0协议,服务器会主动放弃分块编码,所以加一个饼干卷曲

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

  问题解决了,就是这么简单的应用程序

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线