2009-10-13 15 views
10

Utilizo FtpWebRequest para hacer algunas cosas de FTP y necesito conectarme directamente (sin proxy). Sin embargo, WebRequest.DefaultWebProxy contiene la configuración de proxy de IE (reconozco).Cómo eliminar el proxy de WebRequest y dejar intacto 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 

Mi código es una pieza en una aplicación enorme y no quiero cambiar WebRequest.DefaultWebProxy porque es propiedad estática global y que puede tener un impacto adverso en las otras partes de la aplicación.

¿Alguna idea de cómo hacerlo?

Respuesta

19

configurar el proxy a un vacío WebProxy intento, es decir:

request.Proxy = new WebProxy(); 

Esto debería crear un proxy de vacío.

+0

Sí, eso hace el truco. Gracias – Elephantik

+0

Sin problemas, este me dejó perplejo hace un rato. –

+0

Vale la pena señalar que la [documentación de MSDN] (https://msdn.microsoft.com/en-us/library/czdt10d3 (v = vs.110) .aspx) dice que use 'GlobalProxySelection.GetEmptyWebProxy()' para obtener un proxy vacío. Pero si lo intentas, Visual Studio te informará que la clase 'GlobalProxySelection' está obsoleta y que deberías usar' WebRequest.DefaultWebProxy' en su lugar ... que es exactamente lo que el OP ** ** no quiere. – David

7

En realidad su creación en nulo será suficiente también para desactivar la detección automática del proxy, es posible ahorrar algunos ciclos :)

request.Proxy = null; 

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

+0

En realidad, establecer como nulo no ayudó si recuerdo correctamente (como se dice en el comentario del fragmento). La desactivación de la detección automática de proxy afectaría al resto de la aplicación, lo que tampoco puedo hacer. Gracias de cualquier manera – 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(); 
} 
Cuestiones relacionadas