2009-10-13 5 views
10

J'utilise FtpWebRequest pour faire des choses FTP et j'ai besoin de me connecter directement (pas de proxy). Cependant WebRequest.DefaultWebProxy contient des paramètres de proxy IE (je suppose).Comment supprimer un proxy de WebRequest et laisser DefaultWebProxy intacte

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 

Mon code est un morceau dans une grande application et je ne veux pas changer WebRequest.DefaultWebProxy car il est la propriété statique globale et il peut avoir un impact négatif sur les autres parties de l'application.

Une idée de comment le faire?

Répondre

19

essayez de paramétrer le proxy à un WebProxy vide, à savoir:

request.Proxy = new WebProxy(); 

Cela devrait créer un proxy vide.

+0

Ouais, ça fait l'affaire. Merci – Elephantik

+0

Pas de problèmes, celui-ci m'a bloqué un peu de temps. –

+0

Il est à noter que la [documentation MSDN] (https://msdn.microsoft.com/fr-fr/library/czdt10d3 (v = vs.110) .aspx) dit d'utiliser 'GlobalProxySelection.GetEmptyWebProxy()' pour obtenir un proxy vide. Mais si vous essayez ceci, Visual Studio vous informera que la classe 'GlobalProxySelection' est obsolète et que vous devriez utiliser' WebRequest.DefaultWebProxy' à la place ... ce qui est exactement ce que l'OP ne veut pas **. – David

7

réglage fait à null sera suffisant aussi bien pour désactiver la détection de proxy automatique, vous pourriez économiser quelques cycles :)

request.Proxy = null; 

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

+0

En fait, mettre à null n'a pas aidé si je me souviens bien (comme indiqué dans le commentaire de l'extrait). La désactivation de la détection automatique du proxy affecterait le reste de l'application, ce que je ne peux pas faire non plus. Merci quand même – 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(); 
} 
Questions connexes