C # webclient e server proxy

Sto usando una class web client nel mio codice sorgente per scaricare una stringa usando http.

Questo funzionava bene. Tuttavia, i client dell’azienda sono tutti collegati ora a un server proxy. E il problema è iniziato da questo.

Quando ho provato la mia applicazione non penso che possa passare attraverso il server proxy, poiché l’eccezione che continua a essere generata è “nessuna risposta da xxx.xxx.xxx.xxx che è l’indirizzo IP del server proxy.

Tuttavia, posso ancora accedere all’URL del sito Web e visualizza correttamente la stringa nel browser durante la connessione tramite un server proxy, ma non quando utilizzo il mio client web.

C’è qualcosa nel client web che devo configurare per permettermi di accedere all’URL da dietro un server proxy?

using (WebClient wc = new WebClient()) { string strURL = "http://xxxxxxxxxxxxxxxxxxxxxxxx"; //Download only when the webclient is not busy. if (!wc.IsBusy) { string rtn_msg = string.Empty; try { rtn_msg = wc.DownloadString(new Uri(strURL)); return rtn_msg; } catch (WebException ex) { Console.Write(ex.Message); return false; } catch (Exception ex) { Console.Write(ex.Message); return false; } } else { System.Windows.Forms.MessageBox.Show("Busy please try again"); return false; } } 

La mia soluzione:

 WebClient client = new WebClient(); WebProxy wp = new WebProxy(" proxy server url here"); client.Proxy = wp; string str = client.DownloadString("http://www.google.com"); 

Se è necessario autenticarsi con il proxy, è necessario impostare UseDefaultCredentials su false e impostare le Credentials del proxy.

 WebProxy proxy = new WebProxy(); proxy.Address = new Uri("mywebproxyserver.com"); proxy.Credentials = new NetworkCredential("usernameHere", "pa****rdHere"); //These can be replaced by user input proxy.UseDefaultCredentials = false; proxy.BypassProxyOnLocal = false; //still use the proxy for local addresses WebClient client = new WebClient(); client.Proxy = proxy; string doc = client.DownloadString("http://www.google.com/"); 

Se tutto ciò di cui hai bisogno è un semplice proxy, salti comunque la maggior parte delle linee sopra. Tutto quello che serve è:

 WebProxy proxy = new WebProxy("mywebproxyserver.com"); 

Ho riscontrato lo stesso problema ma utilizzando un client Web per scaricare un file da Internet con un’applicazione Winform che la soluzione stava aggiungendo in app.config:

    

La stessa soluzione funzionerà con un’app di asp.net che inserisce le stesse righe in web.config.

Spero che ti sarà d’aiuto.

La risposta proposta da Jonathan è corretta, ma richiede di specificare le credenziali del proxy e l’url nel codice. Di solito, è meglio consentire l’utilizzo delle credenziali come impostazione nel sistema per impostazione predefinita (in genere gli utenti configurano le Impostazioni LAN nel caso in cui utilizzino un proxy) …

La risposta qui sotto è stata fornita da Davide in una risposta precedente, ma ciò richiede la modifica dei file app.config. Questa soluzione è probabilmente più utile poiché fa la stessa cosa in CODICE.

Per consentire all’applicazione di utilizzare le impostazioni proxy predefinite utilizzate nel sistema dell’utente, è ansible utilizzare il seguente codice:

 IWebProxy wp = WebRequest.DefaultWebProxy; wp.Credentials = CredentialCache.DefaultCredentials; wc.Proxy = wp; 

Ciò consentirà al codice dell’applicazione di utilizzare il proxy (con credenziali di accesso e impostazioni URL proxy predefinite) … Nessun mal di testa! 🙂

Spero che questo aiuti i futuri spettatori di questa pagina a risolvere il loro problema!

È necessario configurare il proxy nell’object WebClient.

Vedere la proprietà WebClient.Proxy:

http://msdn.microsoft.com/en-us/library/system.net.webclient.proxy(VS.80).aspx

     byte [] dati;
                 utilizzando (client WebClient = nuovo WebClient ())
                 {
                   Credenziali ICredentials;
                   cred = new NetworkCredential ("[email protected]", "mybestpassword");
                   client.Proxy = nuovo WebProxy ("192.168.0.1", 8000);
                   client.Credentials = cred;
                   string myurl = "http://mytestsite.com/source.jpg";
                   data = client.DownloadData (myUrl);
                }

           File.WriteAllBytes (@ "c: \ images \ target.jpg", dati);