周作人的作品有:C#开发可穿透代理服务器的WinForm应用
来源:百度文库 编辑:中财网 时间:2024/05/03 05:32:16
企业上网一般都是通过网关服务器,部分非自动的代理服务器需要手工设置(就像IE需要在连接-局域网设置-代理器中的那样),前段为企业开发了一个需要远程访问HTTP服务器的应用,发现在手动代理的网络环境下,会在运行时WebRequest试图通过GetResponse获取Response对象时抛出:error: 远程服务器返回错误: (407) 需要代理身份验证。 的错误,其实就是因为网络代理服务器验证失败被拒绝的缘故。前段碰到这个问题,苦于自己没有这样的网络环境,最近正好在客户单位干活,就是用了代理服务器,所以就花了一会儿时间搞出来了,其实很简单:1.获取IE当前缺省的代理服务器信息(物理上其实存储在HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\的ProxyEnable和ProxyServer),地址和端口号可以获取,但用户名和密码还是必须通过设置来获取2.设置WebRequest的Proxy属性,绑定到有效的Proxy对象我自己封装了一个方法,无论是直接连接还是通过代理服务器都可以自适应: public static void ProxySetting(WebRequest request)
{
WebProxy proxy = WebProxy.GetDefaultProxy();//获取IE缺省设置 //如果缺省设置为空,则有可能是根本不需要代理服务器,如果此时配置文件中也未配置则认为不需Proxy
if (proxy.Address == null && Sys.ProxyAddress != null && Sys.ProxyAddress != "")
proxy.Address = new Uri(Sys.ProxyAddress);//按配置文件创建Proxy 地置 if (proxy.Address != null)//如果地址为空,则不需要代理服务器
{
proxy.Credentials = new NetworkCredential(Sys.ProxyUser, Sys.ProxyKey);//从配置封装参数中创建
request.Proxy = proxy;//赋予 request.Proxy
} } 调用: request = (HttpWebRequest)WebRequest.Create(http://abc.com/def.xml); ProxySetting(request);//加在获取响应前 request.GetResponse();配置文件可能如下,读回后被Sys封装:
OK了,现在你的程序就可以穿透设有代理服务器的局域网了 另外,如果需要用到类似XmlDocument直接加载远程XML文件的时间也会出现这样的问题,解决办法也很简单,多写一个方法改用WebRequest获取远程XML,再将Load方法改为LoadXml的装入String就可以了,如下: public static XmlDocument loadXMLDocument(string FileNameOrUrl) { XmlDocument doc = null; try { doc = new XmlDocument(); // doc.Load( FileNameOrUrl); doc.LoadXml(GetWeb(FileNameOrUrl));//改为由WebRequest取回后载入XMLString } catch (Exception e) { System.Windows.Forms.MessageBox.Show(e.Message); Pub.logError(e); doc = null; } return doc; } public static string GetWeb(string Url) { HttpWebRequest request ; HttpWebResponse response=null; StreamReader htmlStream =null; Stream stream=null; string html=""; int i=0; do { request=(HttpWebRequest )WebRequest.Create(Url); ProxySetting(request);//检查代理设置 try { response = (HttpWebResponse)request.GetResponse(); break; } catch { request=null; } } while(i++ <3); if (response==null) return ""; if (request.HaveResponse) { try { stream = response.GetResponseStream(); htmlStream = new StreamReader(stream,System.Text.Encoding.Default,true); html=htmlStream.ReadToEnd(); } catch {} finally { response.Close(); htmlStream.Close(); stream.Close(); } } return html; }
{
WebProxy proxy = WebProxy.GetDefaultProxy();//获取IE缺省设置 //如果缺省设置为空,则有可能是根本不需要代理服务器,如果此时配置文件中也未配置则认为不需Proxy
if (proxy.Address == null && Sys.ProxyAddress != null && Sys.ProxyAddress != "")
proxy.Address = new Uri(Sys.ProxyAddress);//按配置文件创建Proxy 地置 if (proxy.Address != null)//如果地址为空,则不需要代理服务器
{
proxy.Credentials = new NetworkCredential(Sys.ProxyUser, Sys.ProxyKey);//从配置封装参数中创建
request.Proxy = proxy;//赋予 request.Proxy
} } 调用: request = (HttpWebRequest)WebRequest.Create(http://abc.com/def.xml); ProxySetting(request);//加在获取响应前 request.GetResponse();配置文件可能如下,读回后被Sys封装:
C#开发WEBFORM & WINFORM中的类问题
求介绍C# WinForm编程的电子书下载
开发VB.NET winform 的查询窗口问题
C# 多线程控制问题(winForm程序)
C# 多线程控制问题(winForm程序)
C#小问题(winform)加送高分
在VB.NET中对WINFORM开发,怎样实现对IE浏览器的刷新
求C#开发环境的下载地址!!
用什么开发环境开发C#的asp.net?
如何在c# winform中动态向指定access中添加表,我用的是vs2003
C#进阶,需要分层WinForm案例分析,哪位有?重赏
C#项目开发实例
C#开发环境是什么
c# 开发工具
问一个关于c#开发的windows服务的问题
关于C#与.net开发平台的好书有哪些?
用c#开发出来的桌面应用程序可以美化吗?
C#论坛辅助工具!这样的软件可以开发出来吗?
如何系统的学习ASP.NET,用C#语言开发?
我想用.net C#开发的论坛做一个网站
有没有用C#进行嵌入式开发的书?
请问,哪个城市的C#软件开发比较发达?
请问,潍坊的C#软件开发流行吗?
请问,山东哪个城市的C#软件开发比较发达?