300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > java chunked 解码_模拟http请求 带 chunked解析办法一

java chunked 解码_模拟http请求 带 chunked解析办法一

时间:2021-08-02 03:02:31

相关推荐

java chunked 解码_模拟http请求 带 chunked解析办法一

今天在干坏事抓取别人页面时候遇到一个问题,平时我们在post数据后,大不了要求提交cookie,但是今天这个测试了N遍不需要coookie都行的,但是抓取到的始终是乱码,怎么解析都不行。于是自己又把cookie和一大堆header给加上,还是同样的问题,于是开始郁闷了。PHP脚本不行,但是同样的提交浏览器上面就行,这个是怎么回事呢?

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

Coontent-Length: xxxx

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

Transfer-Encodingchunked

于是开始郁闷了,这个到底是啥意思。谷歌了一番终于懂了,也找到对策了。

维基百科上面是这样解释的:

分块传输编码(Chunked transfer encoding)是超文本传输协议(HTTP)中的一种数据传输机制,允许HTTP由网页服务器发送给客户端应用( 通常是网页浏览器)的数据可以分成多个部分。分块传输编码只在HTTP协议1.1版本(HTTP/1.1)中提供。

通常,HTTP应答消息中发送的数据是整个发送的,Content-Length消息头字段表示数据的长度。数据的长度很重要,因为客户端需要知道哪里是应答消息的结束,以及后续应答消息的开始。然而,使用分块传输编码,数据分解成一系列数据块,并以一个或多个块发送,这样服务器可以发送数据而不需要预先知道发送内容的总大小。通常数据块的大小是一致的,但也不总是这种情况。

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

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

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

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