2009-10-13 12 views
10

Bazı FTP şeyler yapmak için FtpWebRequest kullanıyorum ve doğrudan bağlanmam gerekiyor (proxy yok). Ancak WebRequest.DefaultWebProxy, IE proxy ayarlarını içerir (Ben hesabıyorum).WebRequest'ten proxy nasıl kaldırılır ve DefaultWebProxy'ye dokunulmaz

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 

Benim kod büyük bir uygulamada bir parçasıdır ve bunu küresel statik özelliği olduğu için WebRequest.DefaultWebProxy değiştirmek istemiyorsanız ve uygulamanın diğer kısımlarında olumsuz bir etkisi olabilir.

Nasıl yapılacağı hakkında bir fikriniz var mı? Boş webproxy için proxy seçilmesi

cevap

19

denemeydi yani:

request.Proxy = new WebProxy(); 

Bu boş bir proxy oluşturmak gerekir.

+0

Evet, hile yapar. Teşekkürler – Elephantik

+0

Probs yok, bu bir süre önce beni şaşırttı. –

+0

[MSDN belgelerinin] (https://msdn.microsoft.com/en-us/library/czdt10d3 (v = vs.110) .aspx) 'i kullanmak için GlobalProxySelection.GetEmptyWebProxy() 'yi kullanacağını belirtmekte yarar var. boş bir proxy. Ancak, bu Visual Studio'yu denerseniz, "GlobalProxySelection" sınıfının eski olduğunu ve bunun yerine "WebRequest.DefaultWebProxy" yi kullanmanız gerektiğini bildirirsiniz. Bu, OP'nin ** istemediği ** tam olarak budur. – David

7

Aslında oto proxy algılama devre dışı bırakmak için de yeterli olacaktır null ayarlayarak, bazı döngüleri kurtarabilir :)

request.Proxy = null; 

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

+0

Aslında, doğru hatırlamıyorsam (snippet yorumunda belirtildiği gibi) null olarak ayarlanmadı. Otomatik proxy algılama özelliğini devre dışı bırakmak, yapamayacağım uygulamanın geri kalanını da etkileyecektir. Yine de teşekkürler – 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(); 
}