2009-05-10 3 views
22

C# 2008 SP1C# 자동 프록시 설정 검색

"인터넷 옵션"에서 프록시가 설정되었는지 검색하려면이 코드를 사용하고 있습니다. 프록시가 있다면 내 웹 클라이언트에서 이것을 설정할 것입니다.

그래서 프록시 주소가 있는지 확인하고 있습니다. 존재하지 않으면 웹 클라이언트에 설정할 프록시가 없습니다.

이이 할 수있는 올바른 방법인가 : 어떤 조언을

많은 감사를

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

답변

25

WebRequest.DefaultWebProxy은 WebProxy.GetDefaultProxy의 경우 official replacement 인 것으로 보입니다.

조금 수정하면 원래 코드로 그 코드를 드롭 할 수 있어야합니다.

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

이 방법이 권장되는 방법이며 다른 코드를 작성하지 않아도됩니다. – EricLaw

+12

WebRequest.DefaultWebProxy가 WebProxyWrapper를 반환 할 때 클래스 캐스트 예외를 발생시키는 것으로 나타났습니다. 불행히도, 제 경우에는 WebProxyWrapper가 기본 WebProxy 객체에 액세스하지 못하게합니다. 디버깅하려는 코드가 실제 환경에서 프록시를 적용하지 않고 개발 환경에서 프록시를 적용하고있는 것처럼 느껴집니다. – Dan

+5

동일한 문제가 있습니다. 난 대신 웹 프록시의 URI를 얻을 수 있었다 : ** Uri uriProxy = WebRequest.DefaultWebProxy.GetProxy (새 Uri ("http : // someserver.com")); ** – Libor

1

System.Net.Configuration.ProxyElement 클래스를 확인하십시오. 그게 당신이 찾고있는 정보를 가지고 있을지도 모릅니다.

당신이 묘사 한 내용은 레지스트리에서 볼 수 있습니다.

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

첫째, GetDefaultProxy은 당신이 심지어 가까운 미래에 주위에있을 것이라는 보장이 없다, 그래서되지 않는 것으로 표시되어

는 여기에 내가 프록시를 확인하기 위해 쓴 PowerShell 스크립트입니다. 둘째, Address은 null 일 수 있으므로 코드에 NullReferenceException이 발생합니다.

5

WebClient 등은 WinHTTP 설정 (IE 설정 아님)을 사용하므로 가장 쉬운 방법은 WinHTTP를 구성하는 것입니다! XP 등에서 다음을 사용할 수 있습니다.

proxycfg -u 

WinHTTP 저장소에 현재 IE 설정을 가져올 수 있습니다. 그 후 WebClient 등은 문제없이 동일한 설정을 사용할 수 있어야합니다. Vista 및 Windows 7에서이 주소는 아래 주소에 있습니다.

netsh winhttp import proxy ie 

관리자 권한으로 실행해야합니다.

+0

p/invoke를 사용하여 코드를 편집했습니다. 이것은 컴퓨터가 프록시를 통해 연결하고 있는지를 잘 알려줍니다. 그러나, 내 초기 코드 게시물을 참조하십시오. 프록시에 대한 정보를 얻는 올바른 방법입니까? 즉, 주소, 포트? 감사. – ant2009

+0

글쎄, 필자는 WinHTTP 구성이 직접 쿼리하는 것보다 더 나은 선택이라고 주장한다. 직장에서 모든 트래픽은 프록시를 통해 전달됩니다. WinHTTP를 먼저 구성한 경우'WebClient' 만 사용하면 문제가 발생하지 않습니다. –

+0

이 솔루션의 문제점은 사용자가 응용 프로그램을 사용하기 위해 시스템 전체 설정을 변경하는 명령을 실행해야한다는 것입니다. 제한된 환경에서는 명령에 액세스 할 수 없거나 응용 프로그램이 명령에 액세스하지 못할 수도 있습니다. – tjmoore

3

은 다음을 시도해보십시오 : 같은

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

예를 들어 웹 서비스를 호출하기 전에 기본 프록시 설정 및 자격 증명을 얻을 것이다.

2

내 요청 프록시를 WebRequest.GetSystemWebProxy()으로 설정하면 문제가 해결되었습니다.

WebProxy.GetDefaultProxy()은 실제적인 방법이지만 더 이상 사용되지 않습니다.

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

사용 application.config 파일이 조각.

+0

+1. 이것은 나를 위해 일했다. 추적을 사용하여 실패를 식별합니다 (uri의 프록시 설정을 검색 할 수 없음). 그런 다음 기본 프록시 (도메인 정책에 의해 잘못된 URI로 설정 됨)가 사용 중이며 즉시 실패합니다. 위의 설정과 호황을 사용했습니다. 결정된. –