C#自动检测代理设置

C#自动检测代理设置,c#,networking,proxy,C#,Networking,Proxy,C#2008 SP1 我正在使用代码检测是否在“Internet选项”下设置了代理。如果有代理,那么我将在我的webclient中设置它 所以我只是检查代理的地址是否存在。如果没有,则webclient中没有要设置的代理 这样做是否正确: 非常感谢你的建议 WebProxy proxy = WebProxy.GetDefaultProxy(); if (proxy.Address.ToString() != string.Empty) { Console.WriteLine("Prox

C#2008 SP1

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

所以我只是检查代理的地址是否存在。如果没有,则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;
}

查看System.Net.Configuration.ProxyElement类。那可能有你要找的信息

你所描述的工作,你也可以看看注册表

下面是我为签出代理而编写的powershell脚本:

function get-proxy
{
    $path = "HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings"
    $reg = get-itemproperty $path
    return $reg
}

首先,它被标记为已弃用,因此您无法保证它在不久的将来仍然存在。第二,可以为null,因此您提供的代码有可能出现null引用异常:

WebClient
等使用WinHTTP设置(而不是IE设置),因此最简单的方法是配置WinHTTP!在XP等设备上,您可以使用:

proxycfg -u
将当前IE设置导入WinHTTP存储。之后,
WebClient
etc应该能够使用相同的设置而不会出现问题。在Vista和Windows 7上,现在可以在以下位置找到:

netsh winhttp import proxy ie
您需要以管理员身份运行此操作。

这似乎是WebProxy.GetDefaultProxy的最新版本

只需稍加修改,您就可以将其添加到原始代码中。比如:

WebProxy proxy = (WebProxy) WebRequest.DefaultWebProxy;
if (proxy.Address.AbsoluteUri != string.Empty)
{
    Console.WriteLine("Proxy URL: " + proxy.Address.AbsoluteUri);
    wc.Proxy = proxy;
}
请尝试以下操作:

public string GetMeMyInfo(string searchCriteria)
{
    // Instatiate the web service and declare the necessary variables
    WsService.WsServiceBus oWsGetInfo = new WsService.WsServiceBus();
    // Configure the Web Service Proxy
    oWsGetInfo.Proxy = System.Net.WebProxy.GetDefaultProxy();
    oWsGetInfo.Proxy.Credentials = System.Net.CredentialCache.DefaultCredentials;
    // Invoke the web service
    return oWsGetInfo.GetInfo4Me(searchCriteria);
}

例如,这将在调用web服务之前获得默认代理设置和凭据。

将我的请求代理设置为
WebRequest。GetSystemWebProxy()
解决了此问题

WebProxy.GetDefaultProxy()
是实际使用的方法,但现在已被弃用。


<system.net>
<defaultProxy enabled="false" useDefaultCredentials="false">
  <proxy/>
  <bypasslist/>
  <module/>
</defaultProxy>

在application.config文件中使用此代码段。

这对我很有用

        var proxy = WebRequest.GetSystemWebProxy();
        Uri testUrl = new Uri("http://proxy.example.com");
        var proxyUrl = proxy.GetProxy(testUrl);
        if (proxyUrl != testUrl)
            //Use your proxy here
        else
            //We are not using a proxy

我已经使用p/invoke编辑了我的代码。如果计算是通过代理连接的,那么告诉我这个方法很有效。但是,引用我最初的代码帖子。这是获取代理信息的正确方法吗。i、 地址,港口?谢谢。我仍然认为配置WinHTTP比自己查询要好。在工作中,所有(非本地)流量都通过代理,如果我先配置了WinHTTP,那么我在使用
WebClient
时从来没有遇到过问题。此解决方案的问题是,用户需要运行命令更改系统范围的设置,才能使用您的应用程序。在受限环境下,他们也可能无法访问该命令和/或您的应用程序可能无法访问该命令。我不相信您的第一句话是正确的。这取决于应用程序的配置。有关更多信息,请参阅。我必须检查,但这是我在使用标准(空)应用程序配置的香草桌面上反复看到的行为。不过,我可能记错了。这是推荐的方法,它使您不必编写大量其他代码。我发现这给了我一个类强制转换异常,因为WebRequest.DefaultWebProxy正在返回WebProxyWrapper。不幸的是,在我的例子中,WebProxyWrapper不允许我访问底层WebProxy对象,这令人沮丧,因为我试图调试的代码似乎没有在实时环境中应用代理,而是在开发环境中应用代理。我也有同样的问题。我设法获得web代理的URI,而不是使用:URI uriProxy=WebRequest.DefaultWebProxy.GetProxy(新URI(“http://someserver.com”);你提供的演员阵容实际上抛出了一个InvalidCastException!无法将“WebProxyWrapper”类型的对象强制转换为“System.Net.WebProxy”类型。invalidcastexception+1。这对我有用。已启用跟踪以识别故障(无法检索uri的代理设置)。然后,默认代理(由域策略设置为无效uri)被使用,并立即失败。我使用了上述设置和吊杆。已修复。我认为没有提到在该注册表项路径中,感兴趣的字段/项是“ProxyEnable”和“ProxyServer”