Jen*_*ann 2 .net browser proxy response filter
最后,我想阻止在.NET WebBrowser控件下载,它有效地限制为显示HTML,图片,脚本和等,但永远,永远显示"另存为"对话框中给用户.
在回答该问题时提出的解决方案是连接一个自定义代理服务器,该服务器检查响应并过滤掉任何会导致下载提示的内容.如何在我的.NET应用程序中实现这样的代理?我不想安装第三方软件或库.
我找到了HttpListener类,但我遇到了两个问题:
好吧,我想我需要更清楚:我的.NET(富客户端)应用程序正在多个项目中使用,这些项目也有基于Web的应用程序..NET应用程序包含一个带有WebBrowser控件的可重用的通用表单.其他开发人员使用该表单将对其Web应用程序的访问集成到.NET应用程序中.
我想阻止下载,所以我希望我的WebBrowser表单拦截所有流量,并确保它不会导致"另存为"对话框.从而...
HttpListener
应该没问题,但它只是围绕http.sys包装,这个库只在Windows XP及更高版本上可用.
您只需要一个前缀,http://127.0.0.1:8080/
因为它只适用于您的本地Web控件.或者,支持通配符,http://*:8080/
但没有理由在您的情况下使用它.
Jens Bannmann写道:
访问的应用程序不在
localhost
,它们可以在任何地方.这就是为什么我不想硬编码任何东西.
申请是什么意思?你的意思是网站?这完全不同,您的特殊代理服务器将侦听HttpListenerRequests http://127.0.0.1:8080/
,因此您的webcontrol必须使用代理服务器http://127.0.0.1:8080/
.此时它仍然在本地机器内.
将每个传入转换HttpListenerRequest
为HttpWebRequest
,请求响应并获得HttpWebResponse
对象,分析它是否允许对WebBrowser控件进行响应,如果是,则将其写入HttpListnererResponse
对象,否则写入其他内容(错误状态).
这可能是在.NET上构建自己的代理服务器的最简单方法
Jens Bannmann写道:
是的,这种转换是我想要避免的事情.或者我可以只在几行代码中做到这一点?从查看API看起来更复杂.
它实际上非常简单,因为http协议是微不足道的.它基本上有三个部分.
HttpListenerRequest
到HttpWebRequest
.两个类都有原始访问的通用标头属性)整个转换看起来像这样:
HttpListenerRequest listenerRequest;
WebRequest webRequest = WebRequest.Create(listenerRequest.Url);
webRequest.Method = listenerRequest.HttpMethod;
webRequest.Headers.Add(listenerRequest.Headers);
byte[] body = new byte[listenerRequest.InputStream.Length];
listenerRequest.InputStream.Read(body, 0, body.Length);
webRequest.GetRequestStream().Write(body, 0, body.Length);
WebResponse webResponse = webRequest.GetResponse();
Run Code Online (Sandbox Code Playgroud)
如果您需要更多关于http协议的帮助,请参阅此维基百科文章.
您还可以检查此开源项目以获取其他方法.它不依赖于HttpListener
类,但它是完整的代理服务器解决方案,应该很容易根据您的需要进行修改.
归档时间: |
|
查看次数: |
6908 次 |
最近记录: |