Autor Beitrag
oern
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 142

Linux, Win XP
D7
BeitragVerfasst: Do 20.09.07 19:02 
Hi,

ich versuche einen Proxy Server zu erstellen, dafür benutze ich den HttpListener, ich bin z.Z. dabei den HttpListenerContext zu verarbeiten.
Dabei benutze ich denn einen HttpWebRequest, allerdings ist das übertragen von Response und Request äußerst mühsam und deswegen Frage ich es da eine einfachere Möglichkeit gibt den Proxy zu realisieren, schlißlich möchte ich ja die möglichkeiten des HTTP Protokolls, mit Post etc. nicht zerstören.
ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
        private void ProcessRequest(HttpListenerContext ctx)
        {
            string resourcename = ctx.Request.Url.AbsoluteUri;
            FileStream fs = new FileStream("test.txt", FileMode.Create);
            StreamWriter sw = new StreamWriter(fs);
            //sw.WriteLine("URL:" + sr.ReadToEnd());
            sw.WriteLine(ctx.Request.HttpMethod+" "+ctx.Request.RawUrl+" HTTP/"+ctx.Request.ProtocolVersion.ToString());
            sw.WriteLine(ctx.Request.Headers.ToString());

            HttpWebRequest hr = (HttpWebRequest)HttpWebRequest.Create(ctx.Request.Url.AbsoluteUri);
            
            hr.Proxy = new System.Net.WebProxy();
            hr.CookieContainer = new CookieContainer();
            for (int i = 0; i < ctx.Request.Cookies.Count; i++)
            {
             hr.CookieContainer.Add(ctx.Request.Cookies[i]);
            }
           

            hr.Method = ctx.Request.HttpMethod;
            hr.KeepAlive = ctx.Request.KeepAlive;
            if (ctx.Request.UrlReferrer != null)
            {
                hr.Referer = ctx.Request.UrlReferrer.AbsoluteUri;
            }
            hr.UserAgent = ctx.Request.UserAgent;

            WebResponse wr = hr.GetResponse();
            ctx.Response.ContentType = wr.ContentType;
            ctx.Response.ContentLength64 = wr.ContentLength;

            StreamReader rsr = new StreamReader(wr.GetResponseStream());
            string response = rsr.ReadToEnd();
            StreamWriter rsw = new StreamWriter(ctx.Response.OutputStream);
            rsw.Write(response);
            rsw.Close();
            ctx.Response.Close();

            sw.WriteLine();
            sw.Write(response);

            sw.Close();

            HandleProcessRequest(ctx, new EventArgs());

        }


mfg, Björn

_________________
Ich hab eine Signatur