C # serveur WebClient et proxy

j'utilise une classe de client web dans mon code source pour télécharger une chaîne en utilisant http.

C'était bien. Toutefois, les clients de la société sont tous connectés maintenant à un serveur proxy. Et le problème a commencé à partir de ce.

quand j'ai testé mon application, Je ne pense pas qu'elle puisse passer par le serveur proxy, car l'exception qui continue à être lancée est "aucune réponse de xxx.xxx.xxx.xxx qui est l'adresse IP du serveur mandataire.

Cependant, I peut toujours naviguer vers L'URL du site web et il affiche la chaîne correctement dans le navigateur lors de la connexion par un serveur proxy, mais pas lorsque j'utilise mon client web.

Est-il quelque chose dans le client web que je dois configurer pour me permettre d'accéder à l'url de derrière un serveur 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;
    }
}
30
demandé sur Sebastian 2009-05-03 21:30:30

6 réponses

ma solution:

WebClient client = new WebClient();
WebProxy wp = new WebProxy(" proxy server url here");
client.Proxy = wp;
string str = client.DownloadString("http://www.google.com");
36
répondu Jonathan 2012-05-28 06:22:33

si vous devez vous authentifier au proxy, vous devez définir UseDefaultCredentialsfalse, et de définir le proxy Credentials.

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

Si vous avez besoin d'un proxy simple, vous passez la plupart des lignes ci-dessus. Tous vous avez besoin est:

WebProxy proxy = new WebProxy("mywebproxyserver.com");
15
répondu Cullub 2016-11-29 16:01:24

j'ai rencontré le même problème mais en utilisant un webclient pour télécharger un fichier à partir de l'internet avec une application Winform la solution était d'ajouter dans l'application.config:

<system.net>
    <defaultProxy useDefaultCredentials="true" />
</system.net>

la même solution fonctionnera pour un asp.net app insérant les mêmes lignes dans le web.config.

j'Espère que ça aidera.

9
répondu Davide 2014-01-17 10:24:48

vous devez configurer le proxy dans L'objet WebClient.

voir le WebClient.Proxy de la propriété:

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

6
répondu Winston Smith 2009-05-03 17:33:18

la réponse proposée par Jonathan est correcte, mais exige que vous spécifiez les informations d'identification et l'url du proxy dans le code. Habituellement, il est préférable de permettre l'utilisation des informations d'identification comme configuration dans le système par défaut (les utilisateurs configurent généralement les paramètres du réseau local de toute façon au cas où ils utilisent un proxy)...

la réponse ci-dessous a été fournie par Davide dans la réponse précédente, mais cela nécessite de modifier l'application.les fichiers de configuration. Cette solution est probablement plus utile puisqu'elle fait la même chose en CODE.

afin de permettre à l'application d'utiliser les paramètres de proxy par défaut utilisé dans le système de l'utilisateur, on peut utiliser le code suivant:

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

cela permettra au code d'application d'utiliser le proxy (avec les identifiants connectés et les paramètres d'url par défaut)... Pas de maux de tête! :)

espérons que cela aidera les futurs utilisateurs de cette page à résoudre leur problème!

6
répondu Bharat Mallapur 2014-08-11 07:44:17

    byte[] data;
                using (WebClient client = new WebClient())
                {
                  ICredentials cred;
                  cred = new NetworkCredential("xmen@test.com", "mybestpassword");
                  client.Proxy = new 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", data);

2
répondu Ayhan Sarıtaş 2016-12-30 20:22:04