zoukankan      html  css  js  c++  java
  • 监控HTTP(1)

    在配置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);
            }
        }

  • 相关阅读:
    C++开发人脸性别识别教程(12)——加入性别识别功能
    Java数组实现循环队列的两种方法
    开源 免费 java CMS
    Android必知必会-Stetho调试工具
    初中级DBA必需要学会的9个Linux网络命令,看看你有哪些还没用过
    fputs与fgets
    一个使用命令行编译Android项目的工具类
    SpringMVC @RequestBody接收Json对象字符串 demo
    spring 事件(Application Event)
    spring Aop的一个demo
  • 原文地址:https://www.cnblogs.com/fujinliang/p/2839117.html
Copyright © 2011-2022 走看看