2009-10-13 8 views
10

Ich benutze FtpWebRequest, um einige FTP-Sachen zu tun, und ich muss direkt verbinden (kein Proxy). WebRequest.DefaultWebProxy enthält jedoch IE-Proxy-Einstellungen (ich denke).Wie Proxy aus WebRequest entfernen und DefaultWebProxy unberührt lassen

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 

Mein Code ist ein Stück in einer großen Anwendung und ich will nicht WebRequest.DefaultWebProxy ändern, weil es global statische Eigenschaft ist, und es kann auf den anderen Teilen der Anwendung negative Auswirkungen hat.

Irgendeine Idee, wie man es macht?

Antwort

19

versuchen, die Proxy auf eine leere WebProxy Einstellung, das heißt:

request.Proxy = new WebProxy(); 

Dies sollte einen leeren Proxy erstellen.

+0

Ja, das funktioniert der Trick. Danke – Elephantik

+0

Keine Probs, diese hat mich vor einiger Zeit ratlos gemacht. –

+0

Es ist erwähnenswert, dass die [MSDN Dokumentation] (https://msdn.microsoft.com/en-us/library/czdt10d3 (v = vs.110) .aspx) sagt, 'GlobalProxySelection.GetEmptyWebProxy()' zu verwenden, um zu erhalten ein leerer Proxy Aber wenn Sie versuchen, Visual Studio informiert Sie, dass die 'GlobalProxySelection' Klasse veraltet ist und Sie' WebRequest.DefaultWebProxy' stattdessen verwenden sollten ... was genau das ist, was das OP ** nicht will **. – David

7

Einstellung es Eigentlich wird auf null genug als auch automatische Proxy-Erkennung zu deaktivieren, können Sie einige Zyklen sparen :)

request.Proxy = null; 

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

+0

Eigentlich hat das Setzen auf Null nicht geholfen, wenn ich mich richtig erinnere (wie im Snippet-Kommentar gesagt). Die Deaktivierung der automatischen Proxyerkennung würde den Rest der Anwendung beeinträchtigen, was ich auch nicht tun kann. Danke trotzdem – 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(); 
} 
Verwandte Themen