2009-05-03 5 views
28

http를 사용하여 문자열을 다운로드하는 웹 클라이언트 클래스를 사용하고 있습니다.C# webclient 및 프록시 서버

괜찮 았습니다. 그러나 회사의 클라이언트는 모두 이제 프록시 서버에 연결됩니다. 그리고 문제는 이것으로 시작되었습니다.

내 응용 프로그램을 테스트했을 때 프록시 서버를 통과 할 수 없다고 생각합니다. 예외가 계속 발생하는 이유는 "xxx.xxx.xxx.xxx에서 프록시 서버 IP 주소가 응답이 없습니다.

그러나, 나는 여전히 웹 사이트 URL을 탐색 할 수 있으며 프록시 서버를 통해 연결할 때 브라우저에서 제대로 문자열을 표시하지만 내 웹 클라이언트를 사용하지 않을 때.

는 웹에서 무언가가 클라이언트가 프록시 서버 뒤에서 URL에 액세스 할 수 있도록 구성해야합니까?

using (WebClient wc = new WebClient()) 
{ 
    string strURL = "http://xxxxxxxxxxxxxxxxxxxxxxxx"; 

    //Download only when the webclient is not busy. 
    if (!wc.IsBusy) 
    { 
     string rtn_msg = string.Empty; 
     try 
     { 
      rtn_msg = wc.DownloadString(new Uri(strURL)); 
      return rtn_msg; 
     } 
     catch (WebException ex) 
     { 
      Console.Write(ex.Message); 
      return false; 
     } 
     catch (Exception ex) 
     { 
      Console.Write(ex.Message); 
      return false; 
     } 
    } 
    else 
    { 
     System.Windows.Forms.MessageBox.Show("Busy please try again"); 
     return false; 
    } 
} 

답변

33

내 솔루션 : 저도 같은 문제가 발생하지만 함께 인터넷에서 파일을 다운로드 할 수있는 웹 클라이언트를 사용하여 한

WebClient client = new WebClient(); 
WebProxy wp = new WebProxy(" proxy server url here"); 
client.Proxy = wp; 
string str = client.DownloadString("http://www.google.com"); 
+3

이상적으로, 웹 클라이언트는 또한 using 문에 있어야합니다. 유용한 게시물. – Orphid

+1

오르피트보다 더 명백하다; 위의 코드 (완벽하게 합법적 인)를 사용하여 웹 클라이언트에서'.Dispose '를 호출하는 것을 잊지 마십시오! 또한 WebProxy에는 두 번째 인수로 포트 번호를 사용하는 생성자 오버로드가 있습니다 – user3791372

7

app.config에 솔루션이 추가 된 Winform 응용 프로그램 :

<system.net> 
    <defaultProxy useDefaultCredentials="true" /> 
</system.net> 

같은 해결책은 asp.net 앱이 web.config에서 같은 행을 삽입하는 데 사용할 수 있습니다.

희망이 있으면 도움이 될 것입니다.

6

Jonathan이 제안한 답변이 적절하지만 프록시 자격 증명과 URL을 코드에 지정해야합니다. 일반적으로 시스템의 설정으로 자격 증명을 사용하도록 허용하는 것이 좋습니다 (일반적으로 사용자는 프록시를 사용할 경우 LAN 설정을 구성합니다).

아래 답변은 Davide가 이전에 대답했습니다 ,하지만 app.config 파일을 수정해야합니다. 이 솔루션은 CODE에서 동일한 작업을 수행하므로 더 유용 할 것입니다. 로그인 된로 (

IWebProxy wp = WebRequest.DefaultWebProxy; 
wp.Credentials = CredentialCache.DefaultCredentials; 
wc.Proxy = wp; 

이 응용 프로그램 코드가 프록시를 사용 할 수 있습니다 : 하나는 다음과 같은 코드를 사용할 수 있습니다, 사용자의 시스템에서 사용되는 응용 프로그램이 기본 프록시 설정을 사용할 수 있도록하기 위해

자격 증명 및 기본 프록시 URL 설정) ... 두통 없음! :)

희망이 있으면이 페이지의 미래 시청자가 문제를 해결하는 데 도움이됩니다.

+1

Fiddler (로컬 프록시 클라이언트)를 실행할 때 어떻게해야합니까? 프록시를 구성하지 않아도 WebClient를 사용할 때 모든 호출은 피들러를 통해 채널링됩니다. – Nilzor

14

프록시에 인증해야하는 경우 UseDefaultCredentialsfalse으로 설정하고 프록시를 Credentials으로 설정해야합니다.

WebProxy proxy = new WebProxy(); 
proxy.Address = new Uri("mywebproxyserver.com"); 
proxy.Credentials = new NetworkCredential("usernameHere", "pa****rdHere"); //These can be replaced by user input 
proxy.UseDefaultCredentials = false; 
proxy.BypassProxyOnLocal = false; //still use the proxy for local addresses 

WebClient client = new WebClient(); 
client.Proxy = proxy; 

string doc = client.DownloadString("http://www.google.com/"); 

간단한 프록시 만 있으면 위의 줄 대부분을 건너 뛸 수 있습니다.당신이 필요하다 : 그것은는 IDisposable을 구현으로

WebProxy proxy = new WebProxy("mywebproxyserver.com"); 
2
 

    byte[] data; 
       using (WebClient client = new WebClient()) 
       { 
        ICredentials cred; 
        cred = new NetworkCredential("[email protected]", "mybestpassword"); 
        client.Proxy = new WebProxy("192.168.0.1",8000); 
        client.Credentials = cred; 
        string myurl="http://mytestsite.com/source.jpg"; 
        data = client.DownloadData(myUrl); 
       } 

      File.WriteAllBytes(@"c:\images\target.jpg", data);