프록시를 통해 연결하는 C #


92

특정 http 프록시를 통해 모든 연결이 이루어져야하는 사무실에서 일합니다. 웹 서버에서 일부 값을 쿼리하는 간단한 응용 프로그램을 작성해야합니다. 프록시가 없으면 쉽습니다. C # 애플리케이션이 프록시를 인식하도록하려면 어떻게해야합니까? 프록시를 통해 연결하려면 어떻게해야합니까?

답변:


104

이는 코드에서 프로그래밍 방식으로 또는 web.config 또는 app.config에서 선언적으로 쉽게 수행 할 수 있습니다.

다음과 같이 프로그래밍 방식으로 프록시를 만들 수 있습니다.

HttpWebRequest request = (HttpWebRequest)WebRequest.Create("[ultimate destination of your request]");
WebProxy myproxy = new WebProxy("[your proxy address]", [your proxy port number]);
myproxy.BypassProxyOnLocal = false;
request.Proxy = myproxy;
request.Method = "GET";
HttpWebResponse response = (HttpWebResponse) request.GetResponse();

기본적으로 WebProxy개체를 request개체의 proxy속성에 할당합니다 . 이 request후 사용할 proxy사용자가 정의합니다.

선언적으로 동일한 작업을 수행하려면 다음을 수행 할 수 있습니다.

<system.net>
  <defaultProxy>
    <proxy
      proxyaddress="http://[your proxy address and port number]"
      bypassonlocal="false"
    />
  </defaultProxy>
</system.net>

web.config 또는 app.config 내에서. 모든 http 요청이 사용할 기본 프록시를 설정합니다. 정확히 무엇을 달성해야하는지에 따라 defaultProxy / proxy 요소 의 추가 속성 중 일부가 필요할 수도 있고 필요하지 않을 수도 있으므로 해당 문서를 참조하십시오.


프로그래밍 예에서 포트를 설정하지 않았습니다. 왜?
Skuta 2009

@Skuta-특별한 이유가 없습니다. 그것은 그 예에서와 같이 단지 감독 일뿐입니다. 저는 URL (문자열)과 부울을 사용하여 로컬 주소가 우회되는지 확인하는 생성자를 사용하고 있습니다. 특정 포트 번호가 필요한 경우 URL (문자열) 및 포트 번호 (Int32)를 허용하는 오버로드 된 생성자를 사용한 다음 BypassProxyOnLocal즉시 속성을 True (필요한 경우) 로 설정하는 것이 좋습니다.
CraigTP

2
@Skuta-저는 이것을 명확히하고 프로그래밍 방식과 선언적 예제가 실제로 같은 일을하고 있는지 확인하기 위해 게시물을 편집했습니다!
CraigTP 2009-12-22

23

을 사용하는 경우 사용할 수 WebClient있는 프록시 속성이 있습니다.

다른 사람들이 언급했듯이 프록시 설정 감지 / 사용을 자동화하는 몇 가지 방법이 있습니다.

Web.Config :

<system.net>
   <defaultProxy enabled="true" useDefaultCredentials="true">
     <proxy usesystemdefault="true" bypassonlocal="true" />
   </defaultProxy>
</system.net>

이 문서 에서 설명하는 WebProxy 클래스 사용 .


프록시 설정을 직접 (구성 또는 코드) 구성 할 수도 있으며 앱에서이를 사용합니다.

Web.Config :

<system.net>
  <defaultProxy>
    <proxy
      proxyaddress="http://[proxy address]:[proxy port]"
      bypassonlocal="false"
    />
  </defaultProxy>
</system.net>

암호:

HttpWebRequest request = (HttpWebRequest)WebRequest.Create("url");
WebProxy myproxy = new WebProxy("[proxy address]:[proxy port]", false);
request.Proxy = myproxy;
request.Method = "GET";
HttpWebResponse response = (HttpWebResponse) request.GetResponse();

7

이 코드를 사용해보십시오. http 요청을하기 전에 호출하십시오. 코드는 Internet Explorer 설정의 프록시를 사용합니다.하지만 한 가지는 proxy.Credentials = ....프록시 서버가 NTLM 인증 Internet Acceleration Server이기 때문에 사용 합니다. 재즈를 줘.

static void setProxy()
{
    WebProxy proxy = (WebProxy)WebProxy.GetDefaultProxy();
    if(proxy.Address != null)
    {
        proxy.Credentials = System.Net.CredentialCache.DefaultNetworkCredentials;
        WebRequest.DefaultWebProxy = new System.Net.WebProxy(proxy.Address, proxy.BypassProxyOnLocal, proxy.BypassList, proxy.Credentials);
    }
}

3
WebProxy.GetDefaultProxyFramework 4.5부터 사용되지 않으며이 메서드는 null을 반환합니다. 사용하기 전에 생각하는 것이 CredentialCache.DefaultNetworkCredentials좋습니다. CredentialCache에 무언가를 넣고 프록시에 이러한 자격 증명이 필요한 경우 작동합니다. 그렇지 않으면 도움이되지 않습니다.
cassandrad

6

앱이 시스템 기본 프록시를 사용하도록하려면 다음을 Application.exe.config에 추가합니다 (여기서 application.exe는 애플리케이션의 이름 임).

<system.net>
   <defaultProxy enabled="true" useDefaultCredentials="true">
   <proxy usesystemdefault="true" bypassonlocal="true" />
   </defaultProxy>
</system.net>

자세한 내용은 System.NetMSDN 문서 에서 찾을 수 있습니다.


참고 : <system.net> 섹션은 <configuration> 섹션 또는 exe.config 파일에 있습니다. 이것은 내가 요리 한 간단한 콘솔 앱에서 작동하는 프록시 항목을 얻었습니다.
John Dyer

5

이 한 줄짜리가 저에게 효과적입니다.

WebRequest.DefaultWebProxy.Credentials = CredentialCache.DefaultNetworkCredentials;

CredentialCache.DefaultNetWorkCredentials Internet Explorer에 설정된 프록시 설정입니다.

WebRequest.DefaultWebProxy.Credentials 응용 프로그램의 모든 인터넷 연결에 사용됩니다.


1
"CredentialCache.DefaultNetWorkCredentials는 Internet Explorer에 설정된 프록시 설정입니다." 이것이 여전히 사실입니까? 인터넷 옵션> 연결> LAN 설정에서 사용자 이름과 암호를 쓰는 곳을 찾을 수 없습니다.
Matt

문서에서 : "클라이언트 측 애플리케이션의 경우 일반적으로 애플리케이션을 실행하는 사용자의 Windows 자격 증명 (사용자 이름, 암호 및 도메인)입니다."
Coert Grobbelaar

이 답변은 제대로 세인 비트가있을 수 있습니다,하지만 난 확신이 2,015 창문 사실 해요
Coert Grobbelaar

4

Foole의 코드는 나에게 완벽하게 작동했지만 .NET 4.0에서는 Proxy가 NULL인지 확인하는 것을 잊지 마십시오. 이는 프록시가 구성되지 않았 음을 의미합니다 (회사 환경 외부).

그래서 여기 우리 회사 프록시의 문제를 해결 한 코드가 있습니다.

WebClient web = new WebClient();
if (web.Proxy != null)
    web.Proxy.Credentials = System.Net.CredentialCache.DefaultNetworkCredentials;

3

이 코드는 나를 위해 일했습니다.

WebClient wc = new WebClient();
wc.Proxy.Credentials = CredentialCache.DefaultCredentials;

0

자동 프록시 검색은 시스템에서 웹 프록시 서버를 식별하고 클라이언트를 대신하여 요청을 보내는 데 사용되는 프로세스입니다. 이 기능은 웹 프록시 자동 검색 (WPAD)이라고도합니다. 자동 프록시 검색이 활성화되면 시스템은 요청에 사용할 수있는 프록시 집합을 반환하는 프록시 구성 스크립트를 찾으려고합니다.

http://msdn.microsoft.com/en-us/library/fze2ytx2.aspx


4
이것은 질문에 어떻게 대답합니까? OP는이 정보를 어떻게 사용할 수 있습니까?
Cullub 2014 년

0
            var getHtmlWeb = new HtmlWeb() { AutoDetectEncoding = false, OverrideEncoding = Encoding.GetEncoding("iso-8859-2") };

            WebProxy myproxy = new WebProxy("127.0.0.1:8888", false);
            NetworkCredential cred = (NetworkCredential)CredentialCache.DefaultCredentials;
            var document = getHtmlWeb.Load("URL", "GET", myproxy, cred);

5
포스트 코드가 아닌 솔루션에 대한 설명을 작성하는 것이 좋습니다. 독자에게 도움이되는 텍스트를 편집 할 수 있습니까?
Brian Tompsett-汤 莱恩

0

위의 답변에 추가하기 위해 예제를 사용할 것입니다.

웹 플랫폼 설치 프로그램을 통해 패키지를 설치하는 동안 프록시 문제가 발생했습니다.

이것도 WebPlatformInstaller.exe.config 인 구성 파일을 사용합니다.

나는 편집이에 제안 노력 이 IIS 포럼 입니다

<?xml version="1.0" encoding="utf-8" ?>
<configuration>  
  <system.net>    
     <defaultProxy enabled="True" useDefaultCredentials="True"/>      
   </system.net>
</configuration>

<?xml version="1.0" encoding="utf-8" ?>
<configuration>  
   <system.net>    
     <defaultProxy>      
          <proxy 
               proxyaddress="http://yourproxy.company.com:80" 
               usesystemdefault="True"
               autoDetect="False" />    
     </defaultProxy>  
   </system.net>
</configuration>

이들 중 어느 것도 작동하지 않았습니다.

나를 위해 일한 것은 이것이었습니다-

<system.net>    
    <defaultProxy enabled="true" useDefaultCredentials="false">
      <module type="WebPI.Net.AuthenticatedProxy, WebPI.Net, Version=1.0.0.0, Culture=neutral, PublicKeyToken=79a8d77199cbf3bc" />
    </defaultProxy>  
 </system.net>

모듈을 사용하려면 웹 플랫폼 설치 프로그램에 등록해야합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.