昨天在爬数据时,发现某个网站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

转载于:https://www.cnblogs.com/kengwfpzu920/p/6655046.html

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

  1. 【行情采集】解析JS 0.5秒获取版块(可分行业、概念、地域)今日、5日内、10日内资金流向(送代码)

    提示:采集行情仅用于个人量化分析,不做为交易依据 解析JS 0.5秒获取版块(可分行业.概念.地域)今日.5日内.10日内资金流向(送代码) 前言 一.为什么要观察资金流? 1.资金流定义 2.资金流 ...

  2. php transfer-encoding: chunked,php – 使用chunked transfer encoding和gzip

    我最近开始在我的网站上使用gzip,它在除Opera之外的所有浏览器上都起到了一种魅力作用,它给出了一个错误,即由于数据损坏而无法解压缩内容.从我可以从测试和谷歌搜索中收集到的,使用gzip和chun ...

  3. leetcode164. 最大间距 借桶思想秒掉hard题

    给定一个无序的数组,找出数组在排序之后,相邻元素之间最大的差值. 如果数组元素个数小于 2,则返回 0. 示例 1: 输入: [3,6,9,1] 输出: 3 解释: 排序后的数组是 [1,3,6,9] ...

  4. 【源码解析】Encoding in Style: a StyleGAN Encoder for Image-to-Image Translation

    文章目录 Readme training: inference inference.py 参数 人脸对齐工作 尝试进行inference 可视化潜码 问题 Readme 发现了http://local ...

  5. 【论文解析】Encoding in Style: a StyleGAN Encoder for Image-to-Image Translation

    原文链接:https://mp.weixin.qq.com/s/-R_KF13CydmoEZF1k1h_6A 可通过原文链接获取论文电子资源 内容速览 pixel2style2pixel(pSp): ...

  6. 新手必看!单片机掉电检测与数据掉电保存方案

    单片机在正常工作时,因某种原因造成突然掉电,将会丢失数据存储器(RAM)里的数据.在某些应用场合如测量.控制等领域,单片机正常工作中采集和运算出一些重要数据,待下次上电后需要恢复这些重要数据. 因此, ...

  7. 【AI公司酷05期】美宅科技:独创人工智能室内设计引擎,帮你3秒搞定装修方案,要用AI赋能家居新零售

    作者|震霆   出品|遇见人工智能  公众号 GOwithAI [AI公司酷05期]美宅科技--家居新零售领导者,全球独创人工智能室内设计引擎--图灵猫,受邀参加2017年1月11美国硅谷全球人工智能 ...

  8. 技术解析 | 横纵一体的无人车控制方案

    在自动驾驶行业的经典控制方案中,横向控制与纵向控制的求解是模型解耦的独立算法.这种"横纵分离"的控制方案虽然可行,但显然不符合人类的驾驶方式,也不符合横向.纵向紧密联系这一客观事实 ...

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

    2019独角兽企业重金招聘Python工程师标准>>> 本文部分内容节选自华为云帮助中心的分布式数据库中间件(DDM)服务的产品介绍 背景 随着业务增长,逻辑库存储空间不足,并发压力 ...

最新文章

  1. webpack 异步加载配置文件_Webpack 是怎样运行的?
  2. Oracle数据库分组排序
  3. 关于char[]转换成LPCWSTR的有关问题
  4. 十六进制的几种输出方式
  5. linux安装完怎么分区,Linux系统安装模式下硬盘分区怎么做?
  6. POJ - 3614 Sunscreen(贪心/二分图最大匹配-多重匹配/网络流-最大流)
  7. 诊断SQLSERVER问题常用的日志
  8. “睡服”面试官系列第十五篇之对象的扩展(建议收藏学习)
  9. 解决python中TypeError: not enough arguments for format stringj
  10. iOS中UIKit继承结构
  11. 基于R语言利用QQ群进行数据挖掘案例整理
  12. 3层vni vxlan_VXLAN技术介绍:三层的网络来搭建虚拟的二层网络
  13. phpnow mysql_使用PHPnow搭建本地PHP环境+创建MySQL数据库
  14. 坐拥深圳7栋房,月收租60万!房东却选择开出租……
  15. gee学习2数据获取、数据筛选、创建地理要素
  16. WFP实现的端口复用
  17. matplotlib使用cmap
  18. 泉州地区的“会子”是一种怎样的制度?
  19. Impala服务:unable to find SASL plugin: PLAIN
  20. linux下Hiredis的安装和简单使用

热门文章

  1. jQuery以Post方式发送请求并获取返回的文件供下载!
  2. javascript --- [jsonp] script标签的妙用(绕过同源限制)
  3. 征名公布|Qtum量子链企业版—Unita 中文名征集圆满落幕
  4. 【设计模式】单例模式 Singleton Pattern
  5. 智能时代 软件赋能——2017中国软件技术大会
  6. gRPC-rs:从 C 到 Rust 1
  7. cordova-plugin-app-version插件使用
  8. java代码编写出现的陷阱-1:警惕变长参数
  9. MySQL 调用存储过程
  10. asp存储过程使用大全