web-dev-qa-db-fra.com

Client Web C # et serveur proxy

J'utilise une classe de client Web dans mon code source pour télécharger une chaîne à l'aide de http.

Cela fonctionnait bien. Cependant, les clients de l'entreprise sont désormais tous connectés à un serveur proxy. Et le problème est parti de là.

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

Cependant, je peux toujours naviguer vers l'URL du site Web et il affiche correctement la chaîne dans le navigateur lors de la connexion via un serveur proxy, mais pas lorsque j'utilise mon client Web.

Y a-t-il quelque chose dans le client Web que je dois configurer pour me permettre d'accéder à l'URL depuis 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;
    }
}
33
ant2009

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

Si vous devez vous authentifier auprès du proxy, vous devez définir UseDefaultCredentials sur false et 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 tout ce dont vous avez besoin est un simple proxy, vous ignorez la plupart des lignes ci-dessus. Tout ce dont tu as besoin c'est:

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

J'ai rencontré le même problème, mais en utilisant un client Web pour télécharger un fichier depuis Internet avec une application Winform, la solution ajoutait dans app.config:

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

La même solution fonctionnera pour une application asp.net insérant les mêmes lignes dans web.config.

J'espère que cela vous aidera.

9
Davide

La réponse proposée par Jonathan est correcte, mais nécessite que vous spécifiiez les informations d'identification et l'URL du proxy dans le code. Habituellement, il est préférable d'autoriser l'utilisation des informations d'identification comme configuration dans le système par défaut (les utilisateurs configurent généralement les paramètres LAN de toute façon au cas où ils utiliseraient 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 les fichiers app.config. Cette solution est probablement plus utile car elle fait la même chose EN CODE.

Afin de permettre à l'application d'utiliser les paramètres de proxy par défaut utilisés 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 informations d'identification connectées et les paramètres d'URL du proxy par défaut) ... Pas de casse-tête! :)

J'espère que cela aidera les futurs téléspectateurs de cette page à résoudre leur problème!

9
Bharat Mallapur

Vous devez configurer le proxy dans l'objet WebClient.

Voir la propriété WebClient.Proxy:

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

6
Winston Smith
byte[] data;
using (WebClient client = new WebClient())
{
    ICredentials cred;
    cred = new NetworkCredential("[email protected]", "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);
3
Ayhan Sarıtaş