2012-10-22 21 views
9

używam następujący kod html do obtaing danych z internetu:błąd WebProxy: Proxy Authentication Required

WebProxy p = new WebProxy("localproxyIP:8080", true); 
p.Credentials = new NetworkCredential("domain\\user", "password"); 
WebRequest.DefaultWebProxy = p; 
WebClient client = new WebClient(); 
string downloadString = client.DownloadString("http://www.google.com"); 

Ale pojawił się następujący błąd: "Wymagane uwierzytelnienie Proxy". Nie mogę użyć domyślnego serwera proxy, ponieważ mój kod jest uruchamiany z usługi Windows na specjalnym koncie, dla którego nie ma domyślnych ustawień proxy. Więc chcę sprecyzować wszystkie ustawienia proxy w moim kodzie. Proszę doradzić mi, jak rozwiązać ten błąd.

+1

spróbować usunąć domenę \ \ part (również pamiętaj o zawijaniu 'WebClient' za pomocą instrukcji' using() ', ponieważ implementuje' IDisposable') – jwaliszko

Odpowiedz

18

Masz ustawić WebClient.Proxy obiekt ..

WebProxy p = new WebProxy("localproxyIP:8080", true); 
p.Credentials = new NetworkCredential("domain\\user", "password"); 
WebRequest.DefaultWebProxy = p; 
WebClient client = new WebClient(); 
**client.Proxy = p;** 
string downloadString = client.DownloadString("http://www.google.com"); 
+0

nie jest potrzebne, ponieważ 'WebRe quest.DefaultWebProxy = p' wystarczy – jwaliszko

+0

masz rację, jeśli używasz WebRequest.Create() i po wywołaniu WebRequest.GetResponse(). Ale w tym przypadku używa On WebClienta do żądania, więc Proxy nie jest taki sam. – 2GDev

+2

W rzeczywistości metoda 'DownloadString' używa wewnętrznie obiektu' WebRequest' utworzonego przez 'WebRequest.Create()'. Jeśli proxy nie było specjalnie ustawione na obiekt 'WebClient', to taki obiekt' WebRequest' używa proxy uzyskanego z właściwości 'WebRequest.InternalDefaultWebProxy', który jest ustawiony przez' WebRequest.DefaultWebProxy = p' instrukcja; – jwaliszko

1

Spróbuj kod

var transferProxy = new WebProxy("localproxyIP:8080", true); 
transferProxy.Credentials = new NetworkCredential("user", "password", "domain"); 
var transferRequest = WebRequest.Create("http://www.google.com"); 
transferRequest.Proxy = transferProxy; 
HttpWebResponse transferResponse = 
    (HttpWebResponse)transferRequest.GetResponse(); 
System.IO.Stream outputStream = transferResponse.GetResponseStream(); 
39

Ten pracował dla mnie:

IWebProxy defaultWebProxy = WebRequest.DefaultWebProxy; 
defaultWebProxy.Credentials = CredentialCache.DefaultCredentials; 
client = new WebClient 
    { 
     Proxy = defaultWebProxy 
    }; 
string downloadString = client.DownloadString(...); 
+3

Cudownie! To powinno być częścią każdej próbki WebClient. –

Powiązane problemy