模拟http请求chunked解析办法

本文介绍了解决从服务器抓取数据时遇到的乱码问题,特别是当服务器使用了HTTP分块传输编码(Chunked transfer encoding)时。通过调整HTTP协议版本为1.0,成功避免了Chunked编码,解决了数据乱码的问题。
摘要由CSDN通过智能技术生成

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

于是开始分析能看到的数据,终于看到一个特别的地方,

Transfer-Encoding chunked
于是开始郁闷了,这个到底是啥意思。谷歌了一番终于懂了,也找到对策了。
维基百科上面是这样解释的:

我们平时请求数据的时候都会在header里面看到一个

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


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


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值