使用控制台或 Windows窗体应用程序创建本地代理判断程序,以调试和测试连接.
>项目必须请求并接收代理ServerVariables以在客户端显示.
>解析IPAddress并返回匿名状态.
>实施基本的教学方案.
>项目不得使用脚本来实现功能(例如)PHP,Perl,Asp等.
>多平台兼容(可能)
问题:
>是否可以在本地Windows或控制台应用程序上使用Request.ServerVariables,还是特定于ASP?
>如果此方法是ASP特定的,还有另一种方法从浏览器会话请求ServerVariables吗?
>如果上述方法可行,那么实现此功能的正确方法是什么?
>这里验证/设置基本认证方案的好例子是什么?喜欢设置密码和使用的用户等.
使用的参考文献:
http://msdn.microsoft.com/en-us/library/system.web.httpapplication.aspx
http://www.java2s.com/Code/CSharpAPI/System.Net/HttpListenerContextResponseStatusCode.htm
http://en.cship.org/wiki/ProxyJudge
示例代码:
using System.IO; using System.Net; using System.Web; using System.Collections.Specialized; namespace IPJudge { public class IPJudgeClass : IHttpModule { public static void Main() { using (HttpListener listener = new HttpListener()) { listener.AuthenticationSchemes = AuthenticationSchemes.None; listener.Prefixes.Add("http://localhost:8080/"); //listener.Prefixes.Add("https://localhost/"); listener.Start(); HttpListenerContext ctx = listener.GetContext(); ctx.Response.StatusCode = 200; string name = ctx.Request.QueryString["name"]; StreamWriter writer = new StreamWriter(ctx.Response.OutputStream); writer.WriteLine("<P>Hello,{0}</P>",name); writer.WriteLine("<ul>"); foreach (string header in ctx.Request.Headers.Keys) { writer.WriteLine("<li><b>{0}:</b> {1}</li>",header,ctx.Request.Headers[header]); } writer.WriteLine("</ul>"); writer.Close(); ctx.Response.Close(); listener.Stop(); } } public void Init(HttpApplication app) { app.AcquireRequestState += new System.EventHandler(app_AcquireRequestState); app.PostAcquireRequestState += new System.EventHandler(app_PostAcquireRequestState); } public void app_AcquireRequestState(object o,System.EventArgs e) { HttpApplication httpApp = (HttpApplication)o; HttpContext ctx = HttpContext.Current; ctx.Response.Write(" Executing AcquireRequestState "); ctx.Response.Close(); } public void dispose() { // Todo: // Add code to clean up the // instance variables of a module. } public void app_PostAcquireRequestState(object o,System.EventArgs e) { HttpApplication httpApp = (HttpApplication)o; HttpContext ctx = HttpContext.Current; string remotehost = ctx.Request.ServerVariables["REMOTE_ADDR"]; string httpuseragent = ctx.Request.ServerVariables["HTTP_USER_AGENT"]; string requstmethod = ctx.Request.ServerVariables["REQUEST_METHOD"]; string httpreferer = ctx.Request.ServerVariables["HTTP_REFERER"]; string HTTPXFORWARDEDFOR = ctx.Request.ServerVariables["HTTP_X_FORWARDED_FOR"]; string HTTPFORWARDEDFOR = ctx.Request.ServerVariables["HTTP_FORWARDED_FOR"]; string HTTPXFORWARDED = ctx.Request.ServerVariables["HTTP_X_FORWARDED"]; ctx.Response.Write("<P>REMOTE_ADDR: " + remotehost + "</P>"); ctx.Response.Write("<P>HTTP_USER_AGENT: " + httpuseragent + "</P>"); ctx.Response.Write("<P>REQUEST_METHOD: " + httpuseragent + "</P>"); ctx.Response.Write("<P>HTTP_REFERER: " + httpreferer + "</P>"); ctx.Response.Write("<P>HTTP_X_FORWARDED_FOR: " + httpreferer + "</P>"); ctx.Response.Write("<P>HTTP_FORWARDED_FOR: " + httpreferer + "</P>"); ctx.Response.Write("<P>HTTP_X_FORWARDED: " + httpreferer + "</P>"); ctx.Response.Close(); } } }
解决方法
IHttpModule由IIS在ASP.NET WEB应用程序中运行
Main方法由控制台应用程序运行
问题:
> Request.ServerVariables只能在Web服务器上访问
>您将方法输出到响应流的方法(app_PostAcquireRequestState)是我如何做到的.但通常不在HttpModule或特定方法中.尝试将变量输出到ASP.NET管道的末尾.
>您可以在web.config< trace>中打开跟踪,该输出应输出您需要的一些变量.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。