C#自动检测代理设置 [英] C# auto detect proxy settings

查看:230
本文介绍了C#自动检测代理设置的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

C#2008 SP1

我使用的是code如果代理已根据Internet选项设置成检测。如果有一个代理,那么我会在Web客户端设置此。

所以,我只是检查,如果代理服务器的地址存在。如果没有,那么有没有代理的Web客户端进行设置。

这是做到这一点的正确方式:

非常感谢任何建议,

  WebProxy代理= WebProxy.GetDefaultProxy();如果(proxy.Address.ToString()!=的String.Empty)
{
    Console.WriteLine(代理网址:+ proxy.Address.ToString());
    wc.Proxy =代理;
}

====== code编辑==

 函数[DllImport(wininet.dll文件,字符集= CharSet.Auto)
私有外部静态布尔的InternetGetConnectedState(REF InternetConnectionState_e lpdwFlags,诠释dwReserved);[国旗]
枚举InternetConnectionState_e:INT
{
    INTERNET_CONNECTION_MODEM =为0x1,
    INTERNET_CONNECTION_LAN = 0X2,
    INTERNET_CONNECTION_PROXY =为0x4,
    INTERNET_RAS_INSTALLED = 0×10,
    INTERNET_CONNECTION_OFFLINE = 0x20的,
    INTERNET_CONNECTION_CONFIGURED = 0X40
}如果连接通过代理服务器//返回true或false
公共BOOL connectingThroughProxy()
{
    InternetConnectionState_e标志= 0;
    的InternetGetConnectedState(参考标志,0);
    布尔hasProxy = FALSE;    如果((标志&放大器;!InternetConnectionState_e.INTERNET_CONNECTION_PROXY)= 0)
    {
        hasProxy = TRUE;
    }
    其他
    {
        hasProxy = FALSE;
    }    返回hasProxy;
}


解决方案

看来,<一个href=\"http://msdn.microsoft.com/en-us/library/system.net.webrequest.defaultwebproxy.aspx\">WebRequest.DefaultWebProxy是<一个href=\"http://www.west-wind.com/weblog/posts/2005/Jul/11/Replacing-de$p$pcated-SystemNetWebProxyGetDefaultProxy-in-NET-20\">official更换获得WebProxy.GetDefaultProxy。

您应该能够下降,在你原来的code,只有一点点修改。是这样的:

  WebProxy代理=(WebProxy)WebRequest.DefaultWebProxy;
如果(proxy.Address.AbsoluteUri!=的String.Empty)
{
    Console.WriteLine(代理网址:+ proxy.Address.AbsoluteUri);
    wc.Proxy =代理;
}

C# 2008 SP1

I am using the code to detect if a proxy has been set under "Internet Options". If there is a proxy then I will set this in my webclient.

So I am just checking if the address of the proxy exists. If there is not, then there is no proxy to set in the webclient.

Is this the correct way to do this:

Many thanks for any advice,

WebProxy proxy = WebProxy.GetDefaultProxy();

if (proxy.Address.ToString() != string.Empty)
{
    Console.WriteLine("Proxy URL: " + proxy.Address.ToString());
    wc.Proxy = proxy;
}

====== Code edit ======

[DllImport("wininet.dll", CharSet = CharSet.Auto)]
private extern static bool InternetGetConnectedState(ref InternetConnectionState_e lpdwFlags, int dwReserved);

[Flags]
enum InternetConnectionState_e : int
{
    INTERNET_CONNECTION_MODEM = 0x1,
    INTERNET_CONNECTION_LAN = 0x2,
    INTERNET_CONNECTION_PROXY = 0x4,
    INTERNET_RAS_INSTALLED = 0x10,
    INTERNET_CONNECTION_OFFLINE = 0x20,
    INTERNET_CONNECTION_CONFIGURED = 0x40
}     

// Return true or false if connecting through a proxy server
public bool connectingThroughProxy()
{
    InternetConnectionState_e flags = 0;
    InternetGetConnectedState(ref flags, 0);
    bool hasProxy = false;

    if ((flags & InternetConnectionState_e.INTERNET_CONNECTION_PROXY) != 0)
    {
        hasProxy = true;
    }
    else
    {
        hasProxy = false;
    }

    return hasProxy;
}

解决方案

It appears that WebRequest.DefaultWebProxy is the official replacement for WebProxy.GetDefaultProxy.

You should be able to drop that in to your original code with only a little modification. Something like:

WebProxy proxy = (WebProxy) WebRequest.DefaultWebProxy;
if (proxy.Address.AbsoluteUri != string.Empty)
{
    Console.WriteLine("Proxy URL: " + proxy.Address.AbsoluteUri);
    wc.Proxy = proxy;
}

这篇关于C#自动检测代理设置的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆