2009-10-13 2 views
10

FtpWebRequest를 사용하여 일부 FTP 작업을 수행하므로 직접 프록시 (프록시 없음)에 연결해야합니다. 그러나 WebRequest.DefaultWebProxy에는 IE 프록시 설정이 포함되어 있습니다 (필자가 생각하기에).WebRequest에서 프록시를 제거하고 DefaultWebProxy를 손대지 않게하는 방법

WebRequest request = WebRequest.Create("ftp://someftpserver/"); 
// request.Proxy is null here so setting it to null does not have any effect 
WebResponse response = request.GetResponse(); 
// connects using WebRequest.DefaultWebProxy 

내 코드는 큰 응용 프로그램의 한 조각이며 나는 그것이 글로벌 정적 속성이기 때문에 WebRequest.DefaultWebProxy을 변경하지 않으과 응용 프로그램의 다른 부분에 부정적인 영향을 미칠 수 있습니다.

어떻게해야할까요? 빈 WebProxy가에 프록시 설정

답변

19

시도, 즉 :

request.Proxy = new WebProxy(); 

이 빈 프록시를 작성해야합니다.

+0

를 그래, 트릭을 않습니다. 감사합니다 – Elephantik

+0

아무런 probs,이 하나가 좀 전에 난처한. –

+0

[MSDN 설명서] (https://msdn.microsoft.com/en-us/library/czdt10d3(v=vs.110).aspx)에서 'GlobalProxySelection.GetEmptyWebProxy()'를 사용하여 빈 프록시. 그러나 이것을 시도해 보면 Visual Studio는'GlobalProxySelection' 클래스가 더 이상 사용되지 않는다는 것을 알려주고 대신'WebRequest.DefaultWebProxy'를 사용해야합니다 ... 정확히 OP가하는 것 **은 ** 원하지 않습니다. – David

7

실제로 자동 프록시 검색을 사용하지 않도록하기 위해 충분히 잘 될 것입니다 null로 설정, 당신은 어떤 사이클을 절약 할 수 있습니다 :)

request.Proxy = null; 

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

+0

사실, 정확하게 기억한다면 (snippet 주석에서 말한 것처럼) null로 설정하는 것이 도움이되지 않습니다. 자동 프록시 검색을 사용하지 않으면 나머지 응용 프로그램에도 영향을 미칩니다. 어쨌든 고마워. – Elephantik

0
 HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(yourRequestUrl); 
     if (webRequest.Proxy != null) 
     { 
      webRequest.Proxy = null; 
     } 

     webRequest.KeepAlive = true; 
     webRequest.Method = "POST"; 
     webRequest.ContentType = "application/json"; 
     var json = JsonConvert.SerializeObject(yourObject); 
     ASCIIEncoding encoder = new ASCIIEncoding(); 
     byte[] postBytes = encoder.GetBytes(json); 
     webRequest.ContentLength = postBytes.Length; 
     webRequest.CookieContainer = new CookieContainer(); 
     String encoded = System.Convert.ToBase64String(System.Text.Encoding.GetEncoding("ISO-8859-1").GetBytes(string.Format("{0}:{1}", userName, password))); 
     webRequest.Headers.Add("Authorization", "Basic " + encoded); 
     Stream requestStream = webRequest.GetRequestStream(); 
     requestStream.Write(postBytes, 0, postBytes.Length); 
     requestStream.Close(); 

     HttpWebResponse response = (HttpWebResponse)webRequest.GetResponse(); 
     string result; 
     using (StreamReader rdr = new StreamReader(response.GetResponseStream())) 
     { 
       result = rdr.ReadToEnd(); 
} 
관련 문제