博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
监控HTTP(1)
阅读量:6224 次
发布时间:2019-06-21

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

在配置IHttpModule的实现类可以通过:

HttpRequest:

得到HTTP请求的正文信息: 

request.InputStream.Position = 0;//设置流的位置

  StreamReader reader = new StreamReader(request.InputStream);//request请求流
  string aa = reader.ReadToEnd();
  request.InputStream.Seek(0, SeekOrigin.End);//还原到原来的位置

得到请求的头部信息:

 HttpRequest request = m_application.Context.Request;

string head = string.Empty;

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

HttpResponse的response.OutputStream流不能读只能写,但其提供了一个过滤器要使用前需要声明:

  HttpApplication application = sender as HttpApplication;

            string[] temp = application.Request.CurrentExecutionFilePath.Split('.');//虚拟路径
            if (temp.Length > 0)
            {
                application.Response.Filter = new RawFilter(application.Response.Filter);
                RawFilter filter = (RawFilter)application.Response.Filter;
                filter.OnRawDataRecordedEvent += new EventHandler(filter_OnRawDataRecordedEvent);
            }

  public class RawDataEventArgs : EventArgs

    {
        private string sourceCode;
        public RawDataEventArgs(string SourceCode)
        {
            this.sourceCode = SourceCode;
        }

        public string SourceCode

        {
            get { return sourceCode; }
            set { sourceCode = value; }
        }
    }

    //自定义过滤器

    public class RawFilter : Stream
    {
        Stream responseStream;
        long position;
        StringBuilder responseHtml;

        /*当原始数据采集成功后激发*/

        public event EventHandler OnRawDataRecordedEvent;

        public RawFilter(Stream inputStream)

        {
            responseStream = inputStream;
            responseHtml = new StringBuilder();
        }
        public override bool CanRead
        {
            get { return true; }
        }

        public override bool CanSeek

        {
            get { return true; }
        }

        public override bool CanWrite

        {
            get { return true; }
        }

        public override void Flush()

        {
            responseStream.Flush();
        }

        public override long Length

        {
            get { return 0; }
        }

        public override long Position

        {
            get
            {
                return position;
            }
            set
            {
                position = value;
            }
        }

        public override int Read(byte[] buffer, int offset, int count)

        {
            return responseStream.Read(buffer, offset, count);
        }

        public override long Seek(long offset, SeekOrigin origin)

        {
            return responseStream.Seek(offset, origin);
        }

        public override void SetLength(long value)

        {
            responseStream.SetLength(value);
        }
        /*关键的点,在HttpResponse 输入内容的时候,一定会调用此方法输入数据,所以要在此方法内截获数据,经测试能获取webservice时的xml*/
        public override void Write(byte[] buffer, int offset, int count)
        {
            string aa = System.Text.UTF8Encoding.UTF8.GetString(buffer);

            responseStream.Write(buffer, offset, count);

        }
    }

转载于:https://www.cnblogs.com/fujinliang/archive/2012/12/29/2839117.html

你可能感兴趣的文章
你得小心BYOD这10个陷阱!
查看>>
CRM系统能给企业带来什么样的价值?
查看>>
浙江绍兴将出台《意见》推进光伏发电
查看>>
Java访问控制权限
查看>>
理解 Rack 应用及其中间件
查看>>
《Hadoop与大数据挖掘》一2.2.4 动手实践:一键式Hadoop集群启动关闭
查看>>
《大数据云计算时代 数据中心经典案例赏析》——导读
查看>>
IBM 拉开裁员大幕 或波及上万员工
查看>>
天猫618再砸数亿 ,家电不论大小只要比京东贵就赔
查看>>
《实施Cisco统一通信管理器(CIPT1)》——导读
查看>>
Google:我们用一条公式成功增强了 Android 的安全性
查看>>
《CCNP SWITCH 300-115认证考试指南》——1.6节定义关键术语
查看>>
《编写高质量代码:改善c程序代码的125个建议》——建议3-4:避免直接在浮点数中使用“==”操作符做相等判断...
查看>>
《软件开发践行录——ThoughtWorks中国区文集》一一2.1 项目背景
查看>>
一位开发者的 Linux 容器之旅
查看>>
《实践者的研究方法》—— 第2章 软件工程 2.3 软件工程实践
查看>>
《妥协的完美主义:优秀产品经理的实践指南(卷二)》一2.4 团队外部协调...
查看>>
《贝叶斯方法:概率编程与贝叶斯推断》——1.8答案
查看>>
《C和C++代码精粹》——1.3 类型系统
查看>>
30个实例详解TOP命令
查看>>