2009-10-13 9 views
10

Używam FtpWebRequest do niektórych rzeczy FTP i muszę połączyć się bezpośrednio (bez proxy). Jednak WebRequest.DefaultWebProxy zawiera ustawienia proxy IE (I liczyć).Jak usunąć proxy z WebRequest i pozostawić DefaultWebProxy nietknięte

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 

Mój kod to kawałek w ogromnej aplikacji i nie chcę zmieniać WebRequest.DefaultWebProxy ponieważ jest globalna właściwość statyczna i może mieć negatywny wpływ na inne części wniosku.

Każdy pomysł, jak to zrobić?

Odpowiedz

19

spróbuj ustawić proxy do pustej WebProxy, tj:

request.Proxy = new WebProxy(); 

ta powinna utworzyć pusty proxy.

+0

Tak, to załatwia sprawę. Dzięki – Elephantik

+0

Żadnych problemów, to mnie trochę zaskoczyło. –

+0

Warto zauważyć, że [dokumentacja MSDN] (https://msdn.microsoft.com/en-us/library/czdt10d3 (v = vs.110) .aspx) mówi o użyciu 'GlobalProxySelection.GetEmptyWebProxy()' w celu uzyskania puste proxy. Ale jeśli spróbujesz, Visual Studio poinformuje cię, że klasa 'GlobalProxySelection' jest przestarzała i powinieneś użyć' WebRequest.DefaultWebProxy' zamiast tego ... co jest dokładnie tym, czego OP robi ** nie ** chce. – David

7

Właściwie ustawienie go na null wystarczy również, aby wyłączyć automatyczne wykrywanie proxy, można zaoszczędzić kilka cykli :)

request.Proxy = null; 

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

+0

W rzeczywistości ustawienie na wartość null nie pomogło, jeśli dobrze pamiętam (jak podano we fragmencie komentarza). Wyłączenie automatycznego wykrywania proxy wpłynęłoby na resztę aplikacji, których również nie mogę. Dzięki i tak – 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(); 
} 
Powiązane problemy