问题:我的请求获取不到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. keras 设置GPU使用率

     import tensorflow as tffrom keras.backend.tensorflow_backend import set_session config = tf.ConfigP ...

  2. springboot2.x接口返回中文乱码

    @Configuration public class GlobalConversConfiguration extends WebMvcConfigurationSupport { @Bean pu ...

  3. 为什么要使用NoSQL

    转载自:http://www.infoq.com/cn/news/2011/01/nosql-why [编者按]NoSQL在2010年风生水起,大大小小的Web站点在追求高性能高可靠性方面,不由自主都 ...

  4. [Linux 性能调优] 网卡中断与CPU的绑定问题

    在Linux的网络调优方面,如果你发现网络流量上不去,那么有一个方面需要去查一下:网卡处理网络请求的中断是否被绑定到单个CPU(或者说跟处理其它中断的是同一个CPU). 先说一下背景 网卡与操作系统的 ...

  5. Java自定义注解的使用

    什么是注解? #============================================================================================ ...

  6. iOS 更改状态栏颜色和隐藏状态栏

    更改状态栏颜色 iOS7以后 状态栏的字体为黑色:UIStatusBarStyleDefault 状态栏的字体为白色:UIStatusBarStyleLightContent 解决方案 1.在info ...

  7. HAWQ集成Yarn HA作为资源管理服务

    一.第一步当然是配置YARN HA,这在使用ambari管理时很简单,这里不在赘述. 二.建立HAWQ的专用资源队列queue 不要手工编辑scheduler设置,最方便的当然是使用queue man ...

  8. iOS开发之--属性关键字以及set和get方法

    一.属性分为三大类 1.读写性控制 a.readOnly只读,只会生成get方法,不会生成set方法 b.readWrite可读可写,会生成set方法,也会生成get方法(默认设置) 2.setter ...

  9. Thinkpad L440 无线驱动突然无法使用,无法搜索到无线上网

    问题描述: 环境:Thinkpad L440,不知道是什么版本的,找朋友买的,买的时候连系统都没有,自己装的Win7系统,驱动均为官方网站下载安装.电脑在使用过程中一直带着电池,连接电源使用. 问题: ...

  10. git和github新手快速操作流程

    git和github新手快速操作流程 本文主要介绍利用git版本控制将项目托管到远程仓库github上的一般性操作流程,为了给正在学习git的同学们一个小小的参考,以便更轻松的去深入学习git,本文所 ...