C# 自动检测代理设置

标签 c# networking proxy

C# 2008 SP1

我正在使用代码检测是否在“Internet 选项”下设置了代理。如果有代理,那么我将在我的网络客户端中设置它。

所以我只是检查代理地址是否存在。如果没有,则webclient中没有设置代理。

这是执行此操作的正确方法吗:

非常感谢任何建议,

WebProxy proxy = WebProxy.GetDefaultProxy();

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

======代码编辑======

[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;
}

最佳答案

看起来 WebRequest.DefaultWebProxyofficial replacement对于 WebProxy.GetDefaultProxy。

只需稍作修改,您就可以将其放入原始代码中。像这样的东西:

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

关于C# 自动检测代理设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/844467/

相关文章:

macos - 如何在socks代理中使用pip?

c# - CLR调试器和 'var'

c# - 什么时候在 C# 中使用回调而不是事件?

c# - 了解 LINQ to SQL 中的 .AsEnumerable()

windows - 从映射的网络驱动器快速复制文件

python - 关于是否在 TCP 代理项目中使用 Twisted 的一般问题

c# - 将字符串作为包含斜线或为空的 uri 参数传递

networking - Hadoop 自定义节点上的输入分布

c# - 获取每个连接的带宽统计信息

node.js - 使用现有反向代理(node.js 应用程序)将所有 http 转发到 nginx 上的 https