如何截取Http请求

来源:互联网 发布:钢珠自动上弹器在淘宝 编辑:程序博客网 时间:2024/06/06 00:31


1:前言

    本篇文章比较短,主要是因为我的一个随想产生的一段代码。 这段代码的功能你可以叫做是简单的Http服务器也可以叫做Http请求截取。它实现的功能就是截取Http请求然后自己做处理。

2:代码

public class HttpServer : IDisposable    {        private HttpListener listener;        public void Start()        {            listener = new HttpListener();            listener.Prefixes.Add("http://localhost/");                        listener.AuthenticationSchemes = AuthenticationSchemes.IntegratedWindowsAuthentication | AuthenticationSchemes.Anonymous;            listener.Start();            listener.BeginGetContext(GetContext, null);        }        private void GetContext(IAsyncResult ar)        {            HttpListenerRequest Request;            HttpListenerResponse Response;            try            {                HttpListenerContext ctx = listener.EndGetContext(ar);                Request = ctx.Request;                Response = ctx.Response;                //setup waiting for the next request                listener.BeginGetContext(GetContext, null);            }            catch (InvalidOperationException)            {                return;            }            catch (HttpListenerException)            {                return;            }            try            {                var sw = new StreamWriter(Response.OutputStream);                sw.Write(@"<html><body><p>你的请求已经被截取</p></body></html>");                sw.Flush();            }            finally            {                Response.OutputStream.Flush();                Response.Close();            }        }        public void Dispose()        {            if (listener != null)                listener.Stop();        }    }


 

 

 

3:简单解释一下

    代码的核心就是HttpListener,通过它去侦听一个端口,当有请求的时候BeginGetContext交给GetContext方法进行异步处理,在这个方法的内部首先实现的就是重新监听。然后进行自己的处理。