问题:我的请求获取不到URL对应的内容(换个浏览器可以)。

第一步对比wirshark截包看HTTP请求头,发现我这缺失一部分请求头。

对着官方文档添加即可。https://msdn.microsoft.com/zh-cn/library/system.net.httpwebrequest(v=vs.110).aspx

第二步,校正请求头后请求后,发现wireshark有返回,但是无法获取。debug发现无法解析内容。

这个地方可能会耗费一点时间和经验才能知道。

经过目测,发现这个网站是HTTP1.1 ,还有一个参数chunked。简单说就是返回内容的时候,分段返回的。不设置长度。

老版本的读取方法的话,对于这种是没法读取的。参考另一个网友的办法就解决了。

供大家参考吧。自己项目代码就不贴了,避嫌。

static void Main(string[] args)
{
HttpWebResponse web = MySpider.GetResponse("http://localhost:1853/WebForm1.aspx");
DecompressGZip(web );
Console.ReadLine();
} public static MemoryStream DecompressGZip(HttpWebResponse res)
{     //如果服务器使用了Transfer-Encoding:chunked缓冲输出,则只要服务器端Flush了,就会触发此方法,而不是等到服务器发送过来的内容全部发送完才触发,
//而且与是不是异步HttpWebRequest请求也没有关系。相反,如果服务器没有使用Transfer-Encoding:chunked缓冲输出,
//则不管是异步HttpWebRequest请求还是同步HttpWebRequest请求,都得等到服务器发送过来的内容全部发送完才触发此方法。 Stream stream = res.GetResponseStream();
int length = ;
if (res.ContentLength > )
{
length = (int)res.ContentLength;
}
else
{
length = ;
}
MemoryStream memory = new MemoryStream(length);
int count = ;
//每次从服务器返回流中读取5000个字节
byte[] buffer = new byte[];
while (true)
{        //如果服务器使用了Transfer-Encoding:chunked缓冲输出,则如果已经读取了服务器第一次Flush的内容后服务器第二次Flush的内容还没有接收到,则会阻塞当前线程,
//直到接收到服务器第二次Flush的内容(第三,四。。。次Flush也是一样),所以很可能会造成读取一次返回的count不满5000,但下一次继续读取返回的count却不是0的情况 count = stream.Read(buffer, , buffer.Length);
if (count == )
{
break;
}
memory.Write(buffer, , count);
} stream.Close();
//将流的可读位置设置到起始值
memory.Seek(, SeekOrigin.Begin);
return memory;
}

附录

HttpWebRequest请求http1.1的chunked的解析问题记录的更多相关文章

  1. HTTP1.1中CHUNKED编码解析(转载)

    HTTP1.1中CHUNKED编码解析 一般HTTP通信时,会使用Content-Length头信息性来通知用户代理(通常意义上是浏览器)服务器发送的文档内容长度,该头信息定义于HTTP1.0协议RF ...

  2. HTTP1.1中CHUNKED编码解析

    一般HTTP通信时,会使用Content-Length头信息性来通知用户代理(通常意义上是浏览器)服务器发送的文档内容长度,该头信息定义于HTTP1.0协议RFC  1945  10.4章节中.浏览器 ...

  3. 通过HttpWebRequest请求https接口

    一.为什么进行代理接口的开发: 有些项目需要访问被墙了哒网站,比如前不久公司开发项目需要使用google地图的接口,而google在中国被墙了,所有打算做一个代理接口服务,将代理放到国外服务器上,通过 ...

  4. PS常见错误-无法完成请求,因为文件格式模块不能解析该文件

    无法完成请求,因为文件格式模块不能解析该文件 将图片格式变成.jpg格式就可以了

  5. 【安卓网络请求开源框架Volley源码解析系列】定制自己的Request请求及Volley框架源码剖析

    通过前面的学习我们已经掌握了Volley的基本用法,没看过的建议大家先去阅读我的博文[安卓网络请求开源框架Volley源码解析系列]初识Volley及其基本用法.如StringRequest用来请求一 ...

  6. js_html_input中autocomplete="off"在chrom中失效的解决办法 使用JS模拟锚点跳转 js如何获取url参数 C#模拟httpwebrequest请求_向服务器模拟cookie发送 实习期学到的技术(一) LinqPad的变量比较功能 ASP.NET EF 使用LinqPad 快速学习Linq

    js_html_input中autocomplete="off"在chrom中失效的解决办法 分享网上的2种办法: 1-可以在不需要默认填写的input框中设置 autocompl ...

  7. Java生鲜电商平台-SpringCloud微服务架构中网络请求性能优化与源码解析

    Java生鲜电商平台-SpringCloud微服务架构中网络请求性能优化与源码解析 说明:Java生鲜电商平台中,由于服务进行了拆分,很多的业务服务导致了请求的网络延迟与性能消耗,对应的这些问题,我们 ...

  8. HTTP中的请求头和响应头属性解析

    HTTP中的请求头和响应头属性解析 下面总结一下平时web开发中,HTTP请求的相关过程以及重要的参数意义 一次完整的HTTP请求所经历的7个步骤 说明:HTTP通信机制是在一次完整的HTTP通信过程 ...

  9. C# HttpWebRequest请求远程地址获取返回消息

    HttpWebRequest请求远程地址获取返回消息 /// <summary> /// 请求远程Api获取响应返回字符串 /// </summary> /// <par ...

随机推荐

  1. python 信息同时输出到控制台与文件

    python编程中,往往需要将结果用print等输出,如果希望输出既可以显示到IDE的屏幕上,也能存到文件中(如txt)中,该怎么办呢? 方法1 可通过日志logging模块输出信息到文件或屏幕.但可 ...

  2. Python3 File

    open() 方法 Python open() 方法用于打开一个文件,并返回文件对象,在对文件进行处理过程都需要使用到这个函数,如果该文件无法被打开,会抛出 OSError. 注意:使用 open() ...

  3. GeForce GTX 1080 ti安装记录

    安装GeForce GTX 1080ti 安装GeForce GTX 1080ti,8+8pin需要全接,接4pin就开机显示器上会提示电源线没接完,将显示器线接在显卡上. 设置Win 10 pro ...

  4. ifconfig 中的 eth0 eth0:1 eth0.1 与 lo

    1. eth0 eth0:1 eth0.1 eth0 eth0:1 和eth0.1三者的关系对应于物理网卡.子网卡.虚拟VLAN网卡的关系:物理网卡:物理网卡这里指的是服务器上实际的网络接口设备,这里 ...

  5. unity3d IL2CPP for android

    unity3d 使用IL2Cpp导出android工程报以下错误解决方法 重点是这块 “”System.Reflection.TargetInvocationException: ���õ�Ŀ�귢�� ...

  6. mysql 游标 demo

    一.MySQL游标的概念 1.游标介绍 MySQL的游标(cursor)是一个重要的概念,通过查找资料与自己的理解,主要得出以下几点关于自己的理解. 有数据缓冲的思想:游标的设计是一种数据缓冲区的思想 ...

  7. Spring 注入枚举数组

    在spring的配置文件xml中 示例: <!--注入枚举数組--> <bean id="writeMapNullValue" class="org.s ...

  8. nginx的日志配置

    本文转自:https://www.cnblogs.com/biglittleant/p/8979856.html 版权归属原作者!!!!!! nginx access日志配置 access_log日志 ...

  9. axios+post方法提交formdata步骤详解

    遇到的问题 :怎么看自己发送的格式和后台发送的格式 参考 http://www.php.cn/js-tutorial-396014.html https://blog.csdn.net/qq73705 ...

  10. js 判断当前操作系统是ios还是android还是电脑端

    js判断客户端是否是IOS或者是Android //如果返回true 则说明是Android function is_weixin() { var ua = window.navigator.user ...