博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HTTP头部和正文
阅读量:7100 次
发布时间:2019-06-28

本文共 2418 字,大约阅读时间需要 8 分钟。

因为response.OutputStream返回的HttpResponseStream为不能读只能写的流,故要获取其中的数据只能另想办法了,通过reflector可以发现可以用反射的方式截取其中的内容:

response内容:

private TextWriter tw_new, tw_old;

private StringBuilder _content;
private FieldInfo tw_field;

BeginRequest事件中:

_content = new StringBuilder();
tw_old = _contextApplication.Response.Output;      
tw_new = new StringWriter(_content);
var type_rp = _contextApplication.Response.GetType();
tw_field = type_rp.GetField("_writer", BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);

tw_field.SetValue(_contextApplication.Response, tw_new);//重新设置_write(TextWrite)的字段为tw_new,这样response.write就写写入到_content中

EndRequest事件中:

 tw_field.SetValue(_contextApplication.Response, tw_old);//还原TextWrite _write还原

 if (!string.IsNullOrEmpty(_content.ToString()))

 {
         _contextApplication.Response.Write(_content.ToString());//输入到页面_content为页面内容
}

头部:

1.获取HttpWorkerRequest类:

 HttpWorkerRequest m_workRequest = GetWorkerRequest();

 private HttpWorkerRequest GetWorkerRequest()

 {

            IServiceProvider m_provider = HttpContext.Current;

            return ((HttpWorkerRequest)m_provider.GetService(typeof(HttpWorkerRequest)));
}

2.反射获取request头部:

FieldInfo test=m_workRequest.GetType().GetField("_allRawHeaders", BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);

 if (test != null) 
{
        string mm = test.GetValue(m_workRequest) as string;//得到头部信息
}

当然也可以通过:

  string head = string.Empty;

for (int i = 0; i < request.Headers.Count; i++)
            {
                head += request.Headers.GetKey(i) + ":" + request.Headers[i]+"\n";
            }

3.获取页面中设置过 的resonse头部

在通过reflector观看代码过程中,无法获取到系统返回给客户端的代码,只能获取我们自己在页面中设置的头部信息,reponse头部分两种,分别对应两个字段

_customHeaders(自定义头部)_cacheHeaders缓存头部(如Expires)

 response.AddHeader("aaa", "aa");//自定义头部

            response.AddHeader("Expires", "2012-01-01");//需要缓存的头部
            //response.AddHeader("Content-Type", "text/xml");

            FieldInfo field_ResponseHeader = response.GetType().GetField("_customHeaders", BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);

            FieldInfo field_ResponseHeader2 = response.GetType().GetField("_cacheHeaders", BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);
            if (field_ResponseHeader != null)
            {
                ArrayList collection = field_ResponseHeader.GetValue(response) as ArrayList;//获取自定义的值
                ArrayList collection2 = field_ResponseHeader2.GetValue(response) as ArrayList;//获取缓存头部添加的值
            }

IIS中可以设置返回给浏览器的头部信息,尽量去掉无用的头部信息以减少流量

 

转载于:https://www.cnblogs.com/fujinliang/archive/2012/12/30/2839722.html

你可能感兴趣的文章
如何实现多云成本的管理
查看>>
香港特首参观杭州城市大脑,阿里云技术获赞
查看>>
切入物流分拣市场,3D机器视觉还有多长的路要走?
查看>>
Influxdb简单实用操作
查看>>
好程序员Web前端开发入门之网页制作三要素
查看>>
「镁客早报」紫光申请100亿纾困专项债券;比利时禁止Facebook追踪当地用户
查看>>
阿里云专有宿主机(商业化)发布
查看>>
k8s :构建系统
查看>>
Linux 卸载挂载的磁盘时提示正忙
查看>>
MySQL免编译安装及登录(5.6.36)
查看>>
“莫兰迪色系” 高级灰
查看>>
微信小程序的十七个流量入口!
查看>>
YYKit 源码探究
查看>>
[雪峰磁针石博客]python 3.7极速入门教程5循环
查看>>
Nancy之基于Nancy.Hosting.Self的小Demo
查看>>
KDD 18 论文解读 | GraphWave:一种全新的无监督网络嵌入方法
查看>>
shell 在手分析服务器日志不愁?
查看>>
jeesite配置指南(官方文档有坑,我把坑填了!)
查看>>
Nginx 服务器本地缓存配置(学习笔记十五)
查看>>
[WPF]自定义鼠标指针
查看>>