惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Attack and Defense Labs
Attack and Defense Labs
D
Darknet – Hacking Tools, Hacker News & Cyber Security
V
Vulnerabilities – Threatpost
Simon Willison's Weblog
Simon Willison's Weblog
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Project Zero
Project Zero
P
Palo Alto Networks Blog
G
GRAHAM CLULEY
www.infosecurity-magazine.com
www.infosecurity-magazine.com
H
Hacker News: Front Page
Help Net Security
Help Net Security
S
Schneier on Security
A
Arctic Wolf
Know Your Adversary
Know Your Adversary
L
LINUX DO - 热门话题
Security Archives - TechRepublic
Security Archives - TechRepublic
L
LangChain Blog
T
The Exploit Database - CXSecurity.com
V2EX - 技术
V2EX - 技术
罗磊的独立博客
雷峰网
雷峰网
酷 壳 – CoolShell
酷 壳 – CoolShell
有赞技术团队
有赞技术团队
P
Privacy & Cybersecurity Law Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Last Week in AI
Last Week in AI
人人都是产品经理
人人都是产品经理
C
Cybersecurity and Infrastructure Security Agency CISA
T
Threat Research - Cisco Blogs
C
Cyber Attacks, Cyber Crime and Cyber Security
J
Java Code Geeks
量子位
大猫的无限游戏
大猫的无限游戏
C
Check Point Blog
云风的 BLOG
云风的 BLOG
SecWiki News
SecWiki News
Hacker News: Ask HN
Hacker News: Ask HN
B
Blog RSS Feed
Hugging Face - Blog
Hugging Face - Blog
C
CXSECURITY Database RSS Feed - CXSecurity.com
T
Troy Hunt's Blog
U
Unit 42
N
Netflix TechBlog - Medium
阮一峰的网络日志
阮一峰的网络日志
The Register - Security
The Register - Security
Recorded Future
Recorded Future
爱范儿
爱范儿
Webroot Blog
Webroot Blog
Engineering at Meta
Engineering at Meta

博客园 - hzman

ASP采集入库生成本地文件的几个FUCTION 用XMLhttp编写web采集程序 无需安装软件架设NOD32升级服务器指南! 架设NOD32升级服务器 - hzman - 博客园 C#游戏外挂代码 VC7转换到VC8的常见问题 ini文件操作类 OllyDBG 入门系列(二)-字串参考 OllyDBG 入门系列(一)-认识OllyDBG - hzman - 博客园 live.cn邮箱注册帐号方法 - hzman - 博客园 免手机验证码网站备案 ASP同一虚拟空间放多个站点(各站点对应独立域名)的方法 QQ空间代码说明 页面间传值方法 C#编写NotifyIcon 深入浅出之正则表达式 两个分析HTML网页的方法 提取HTML代码中文字的C#函数 c#字符串截取函数
C#代码,功能为拦截http请求,并篡改其中任何内容
hzman · 2007-07-04 · via 博客园 - hzman

可以对http最终输出内容做任意的替换,代码如下:

using System;
using System.Collections;
using System.Configuration;
using System.Text.RegularExpressions;
using System.Web;
using System.Xml;
using System.Xml.Serialization;
using System.IO;
using System.Text;

namespace Cnlamar.Web.HttpModule
{
    public class TextReplace : IHttpModule
    {

        public virtual void Dispose()
        {
        }

        public virtual void Init(HttpApplication context)
        {
            context.ReleaseRequestState += new EventHandler(this.context_ReleaseRequestState);
        }

        public void context_ReleaseRequestState(object sender, EventArgs e)
        {
            HttpApplication httpApplication = (HttpApplication)sender;
            if (httpApplication.Response.ContentType.ToLower().IndexOf("image") <= -1)
            {
                TextReplaceFilter textReplaceFilter = new TextReplaceFilter(httpApplication.Response.Filter);
                textReplaceFilter.Encoding = System.Text.Encoding.GetEncoding(httpApplication.Response.ContentEncoding.BodyName);
                textReplaceFilter.ReplaceRules = TextReplaceConfiguration.GetConfig().Rules;
                httpApplication.Response.Filter = textReplaceFilter;
            }
        }
    }

    class TextReplaceFilter : Stream
    {
        public bool IsRestore = false;

        private Stream m_stream;

        private long m_position;

        private TextReplaceRulesCollection _ReplaceRules;

        public TextReplaceRulesCollection ReplaceRules
        {
            get
            {
                return _ReplaceRules;
            }

            set
            {
                _ReplaceRules = value;
            }
        }

        public Encoding Encoding
        {
            get
            {
                return _Encoding;
            }

            set
            {
                _Encoding = value;
            }
        }
        private Encoding _Encoding = Encoding.UTF8;

        public override bool CanRead
        {
            get
            {
                return true;
            }
        }

        public override bool CanSeek
        {
            get
            {
                return false;
            }
        }

        public override bool CanWrite
        {
            get
            {
                return false;
            }
        }

        public override long Length
        {
            get
            {
                return 0;
            }
        }

        public override long Position
        {
            get
            {
                return m_position;
            }

            set
            {
                m_position = value;
            }
        }

        public TextReplaceFilter(Stream InputStream)
        {
            m_stream = InputStream;
        }

        public override long Seek(long offset, SeekOrigin direction)
        {
            return 0;
        }

        public override void SetLength(long length)
        {
            m_stream.SetLength(length);
        }

        public override void Close()
        {
            m_stream.Close();
        }

        public override void Flush()
        {
            m_stream.Flush();
        }

        public override int Read(byte[] buffer, int offset, int count)
        {
            return m_stream.Read(buffer, offset, count);
        }

        public override void Write(byte[] buffer, int offset, int count)
        {
            string str = Encoding.GetString(buffer, offset, count);
            IEnumerator iEnumerator = ReplaceRules.GetEnumerator();
            try
            {
                while (iEnumerator.MoveNext())
                {
                    TextReplaceRules textReplaceRules = (TextReplaceRules)iEnumerator.Current;
                    str = str.Replace(textReplaceRules.OriginText, textReplaceRules.ResultText);
                }
            }
            finally
            {
                IDisposable iDisposable = iEnumerator as IDisposable;
                if (iDisposable != null)
                {
                    iDisposable.Dispose();
                }
            }
            byte[] bs = Encoding.GetBytes(str);
            m_stream.Write(bs, offset, (int)bs.Length);
        }
    }

    #region Config
    public class TextReplaceRules
    {
        private string _OriginText;

        private string _ResultText;

        public string OriginText
        {
            get
            {
                return _OriginText;
            }

            set
            {
                _OriginText = value;
            }
        }

        public string ResultText
        {
            get
            {
                return _ResultText;
            }

            set
            {
                _ResultText = value;
            }
        }
    }

    [SerializableAttribute()]
    public class TextReplaceRulesCollection : CollectionBase
    {

        public TextReplaceRules this[int index]
        {
            get
            {
                return (TextReplaceRules)base.InnerList[index];
            }

            set
            {
                base.InnerList[index] = value;
            }
        }

        public virtual void Add(TextReplaceRules r)
        {
            base.InnerList.Add(r);
        }
    }

    [XmlRootAttribute("TextReplaceConfig")]
    [SerializableAttribute()]
    public class TextReplaceConfiguration
    {
        private TextReplaceRulesCollection rules;

        public TextReplaceRulesCollection Rules
        {
            get
            {
                return rules;
            }

            set
            {
                rules = value;
            }
        }

        public static TextReplaceConfiguration GetConfig()
        {
            if (HttpContext.Current.Cache["TextReplaceConfig"] == null)
            {
                TextReplaceConfiguration textReplaceConfiguration1 = (TextReplaceConfiguration)ConfigurationSettings.GetConfig("TextReplaceConfig");
                HttpContext.Current.Cache.Insert("TextReplaceConfig", ConfigurationSettings.GetConfig("TextReplaceConfig"));
            }
            TextReplaceConfiguration textReplaceConfiguration2 = (TextReplaceConfiguration)HttpContext.Current.Cache["TextReplaceConfig"];
            return textReplaceConfiguration2;
        }
    }

    public class TextReplaceSerializerSectionHandler : IConfigurationSectionHandler
    {

        public virtual object Create(object parent, object configContext, XmlNode section)
        {
            return new XmlSerializer(typeof(TextReplaceConfiguration)).Deserialize(new XmlNodeReader(section));
        }
    }
    #endregion
}