2012-10-22 9 views
9

Io uso il seguente codice per obtaing dati HTML da internet:errore WebProxy: Autenticazione proxy richiesta

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"); 

Ma è apparso il seguente errore: "Autenticazione proxy richiesta". Non riesco a utilizzare il proxy predefinito perché il mio codice viene eseguito dal servizio Windows sotto l'account speciale per il quale non esistono impostazioni proxy predefinite. Quindi, voglio specidy tutte le impostazioni del proxy nel mio codice. Per favore mi consigli su come risolvere questo errore.

+1

cercare di rimuovere il dominio \ \ parte (ricorda anche di avvolgere 'WebClient' con l'istruzione' using() 'perché implementa' IDisposable') – jwaliszko

risposta

18

Hai per impostare la proprietà WebClient.Proxy ..

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

non è necessario perché 'WebRe quest.DefaultWebProxy = p' è sufficiente – jwaliszko

+0

hai ragione se usi WebRequest.Create() e dopo che chiami WebRequest.GetResponse(). Ma in questo caso sta usando il WebClient per fare richieste in modo che il Proxy non sia lo stesso. – 2GDev

+2

In realtà il metodo 'DownloadString' utilizza internamente l'oggetto' WebRequest' creato da 'WebRequest.Create()'. Se il proxy non era particolarmente impostato sull'oggetto 'WebClient', tale oggetto' WebRequest' utilizza il proxy ottenuto dalla proprietà 'WebRequest.InternalDefaultWebProxy', che è appena impostata dall'istruzione' WebRequest.DefaultWebProxy = p'; – jwaliszko

1

Prova questo codice

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

Questo ha funzionato per me:

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

Meraviglioso! Questo dovrebbe essere parte di ogni esempio di WebClient. –