.net 解析Transfer-Encoding:chunked 秒掉网上无用方案

昨天在爬数据时,发现某个网站Response.Get过来的数据一直是为空。当时就很奇怪,认真看下了响应头。发现Transfer-Encoding:chunked这个玩意
网上查了下资料
一般情况HTTP的Header包含Content-Length域来指明报文体的长度。
有时候服务生成HTTP回应是无法确定消息大小的,比如大文件的下载,或者后台需要复杂的逻辑才能全部处理页面的请求,这时用需要实时生成消息长度,服务器一般使用chunked编码。

在进行Chunked编码传输时,在回复消息的Headers有transfer-encoding域值为chunked,表示将用chunked编码传输内容。使用chunked编码的Headers如下(可以利用FireFox的FireBug插件或HttpWatch查看Headers信息,HttpWatch还可以查看chunked的个数):

编码使用若干个Chunk组成,由一个标明长度为0的chunk结束,每个Chunk有两部分组成,第一部分是该Chunk的长度和长度单位(一般不写),第二部分就是指定长度的内容,每个部分用CRLF(全称carriage return/line feed 回车换行)隔开。在最后一个长度为0的Chunk中的内容是称为footer的内容,是一些没有写的头部内容。

这上面是网上的原话,具体更详细的可以去参考里面看看

不过网上很多关于chunked .net解析都是tmd无用,把代码贴出来,后面的小哥们不要再痛苦。

哥当时也是写不出解析代码,想着网上找找,国内找的都千扁一屡,最后在国外论坛找到了方案。

最后通过Fiddler调试看到,POST的网站有返回Content-Length,此时心都炸了。找了半天,你居然告诉我,是有Length返回。但是浏览器F12看到的却是Transfer-Encoding:chunked。
试着在Fiddler上面模拟调试,看看请求前,请求后的变化。
把浏览器请求头内容复制到Fiddler的参数里面,点击exec,响应区域显示为空。我的神哟这tmd什么情况,参数有问题?,认真对照一下吧,总会发现有问题
。。。。。
当时我没有特别注意Cookie,也没有传过去,Cookie为空。把浏览器里面的Cookie信息拷贝进去。exec,断点命中了。。。。。。。。。当时是多么的开心,说明这个网站的POST必须要cookie

解析代码也找到,那再把.net代码检查下。运行,拿到了数据。。。。不写了

贴代码

StringBuilder sb1 = new StringBuilder();
Byte[] buf = new byte[256];
Stream resStream = myHttpWebResponse.GetResponseStream();

resStream = new GZipStream(resStream, CompressionMode.Decompress);

string tmpString = null;
int count = 0;
do
{
count = resStream.Read(buf, 0, buf.Length - 1);
if (count != 0)
{
tmpString = Encoding.UTF8.GetString(buf, 0, count);
sb1.Append(tmpString);
}
} while (count > 0);

参考
https://imququ.com/post/transfer-encoding-header-in-http.html
还有一个网站找不到了,可怜了。

http://www.dayuji1000.com/vrtechnews/index.html
http://www.xafuda.cn/article/jnd3.5.html

时间: 2024-10-14 00:26:44

.net 解析Transfer-Encoding:chunked 秒掉网上无用方案的相关文章

【值得收藏】三个在线解析下载微博和秒拍视频工具的使用评测

因为副业是自媒体人,经常要去搬运视频到自己的媒体号,而我的视频大多来自微博平台.因为微博自身没提供下载视频到本地的功能,所以我们需要借助一些第三方工具来帮我们完成解析下载视频这个事儿. 从两年前开始做自媒体到今天,用过很多个下载微博秒拍视频的工具.今天就来分析比较下其中的差异. No.1: http://weibo.iiilab.com/ 这个工具是后起之秀,出生得虽然晚,但长江后浪推前浪.它界面上比较干净整洁,响应式的H5页面,不论在手机上还是电脑上都看起来很舒服,没有广告,当然如果仅仅好看是

crontab执行到秒级的常用方案

crontab的粒度最小是到分钟,但是还是可以通过变通的方法做到隔多少秒运行一次. 以下方法将每10秒执行一次 crontab -e /bin/date sleep 10; /bin/date sleep 20; /bin/date sleep 30; /bin/date 意思是每分钟执行 /bin/date,每分钟开始之后sleep10后执行,..... 实际上上面的命令都是在每分钟就已经执行了,技巧就是在commad里面通过sleep来到达秒级间隔.

DDM实践:数据库秒级平滑扩容方案

本文部分内容节选自华为云帮助中心的分布式数据库中间件(DDM)服务的产品介绍 背景 随着业务增长,逻辑库存储空间不足,并发压力较大. 解决方案 此时可对DDM实例逻辑库进行平滑扩容,通过增加RDS实例来提高数据存储能力与并发支持能力.在不中断应用服务的情况下,通过新增RDS实例,扩展数据库存储空间.扩容除了解决数据存储容量瓶颈,还能通过增加并发计算能力间接提升数据库性能.通过DDM管理控制台操作即可完成扩容,应用无需改造,扩容进度支持可视化跟踪. 平滑扩容 平滑扩容是一种水平扩容方式,通过增加R

【实例解析】某集团BI决策系统建设方案分享

企业核心竞争能力的提升,需要强壮的运营管理能力,需要及时.准确.全面的业务数据分析作为参考与支撑. 某集团是大型时尚集团,内部报表系统用的QlikView,但是管理分配不够灵活,不能满足数据安全的要求,其次并发数只有10个,仅能满足部分使用者的报表查看需求,所以亟需一个统一的能够集中体现企业运营活动状况.全局.直观的BI决策系统,数据有效服务于决策管理有限,解决企业管理报表层面的问题与需求. 一.架构设计 二.开发工具 ETL工具:微软SSIS BI工具:帆软商业智能FineBI 三.数据准备

HTTP2.0那些事

1. HTTP2.0的前世 http2.0的前世是http1.0和http1.1这两兄弟.虽然之前仅仅只有两个版本,但这两个版本所包含的协议规范之庞大,足以让任何一个有经验的工程师为之头疼.http1.0诞生于1996年,协议文档足足60页.之后第三年,http1.1也随之出生,协议文档膨胀到了176页.不过和我们手机端app升级不同的是,网络协议新版本并不会马上取代旧版本.实际上,1.0和1.1在之后很长的一段时间内一直并存,这是由于网络基础设施更新缓慢所决定的.今天的http2.0也是一样,

HTTP 2.0的那些事

转自:http://www.admin10000.com/document/9310.html 在我们所处的互联网世界中,HTTP协议算得上是使用最广泛的网络协议.最近http2.0的诞生使得它再次互联网技术圈关注的焦点.任何事物的消退和新生都有其背后推动的力量.对于HTTP来说,这力量复杂来说是各种技术细节的演进,简单来说是用户体验和感知的进化.用户总是希望网络上的信息能尽可能快的抵达眼球,越快越好,正是这种对“快”对追逐催生了今天的http2.0. 1. HTTP2.0的前世 http2.0

go--单任务版爬虫

1.获取初识页面内容 package main import ( "net/http" "fmt" "io/ioutil" ) func main() { //打开链接,会有两个返回值,一个响应,一个error res, err := http.Get("https://tieba.baidu.com/p/5524106374?red_tag=0000236673") if err != nil { panic(err) }

聊聊移动端跨平台开发的各种技术

介绍 最近出现的 React Native 再次让跨平台移动端开发这个话题火起来了,曾经大家以为在手机上可以像桌面那样通过 Web 技术来实现跨平台开发,却大多因为性能或功能问题而放弃,不得不针对不同平台开发多个版本. 但这并没有阻止人们对跨平台开发技术的探索,毕竟谁不想降低开发成本,一次编写就处处运行呢?除了 React Native,这几年还出现过许多其它解决方案,本文我将会对这些方案进行技术分析,供感兴趣的读者参考. 为了方便讨论,我将它们分为了以下 4 大流派: Web 流:也被称为 H

聊聊移动端跨平台开发的几种流派

最近出现的 React Native 再次让跨平台移动端开发这个话题火起来了,曾经大家以为在手机上可以像桌面那样通过 Web 技术来实现跨平台开发,却大多因为性能或功能问题而放弃,不得不针对不同平台开发多个版本. 但这并没有阻止人们对跨平台开发技术的探索,毕竟谁不想降低开发成本,一次编写就处处运行呢?除了 React Native,这几年还出现过许多其它解决方案,本文我将会对这些方案进行技术分析,供感兴趣的读者参考. 为了方便讨论,我将它们分为了以下 4 大流派: Web 流:也被称为 Hybr