IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

C# - WebBrowser & HttpWebRequest


Sujet :

C#

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 28
    Points : 18
    Points
    18
    Par défaut C# - WebBrowser & HttpWebRequest
    Bonjour à tous,

    voilà bon je galère un peu mais après plusieurs recherches sur notre ami commun je désespère de trouver un solution qui me convienne. Voilà le topo : j'ai créer une petite classe qui utilise les HttpWeb* pour me permettre de me connecter à un site web, connexion avec login/passw, ça ouvre une session et nikel je peux faire mes petites affaires. Maintenant j'aurais voulu dans mon application implémenter la possibilité tout en passant par mon appli de naviguer sur le site web en question en utilisant la même session et donc les mêmes cookies. Alors bon, on trouve tout plein de méthodes pour aller dans le sens WebBrowser > HttpWeb* (enfin toujours la même) mais pas l'inverse.

    Si quelqu'un a le début d'une piste à me donner je vous en serais gré .

    Bonne soirée à vous, cordialement.

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    En gros, il faut récupérer les cookies de la réponse HTTP, et les passer au navigateur avec l'API InternetSetCookieEx

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
        foreach (var cookie in response.Cookies.Cast<Cookie>())
        {
            string url = string.Format("http://{0}{1}", cookie.Domain, cookie.Path);
            string data = string.Format("{0}={1}; Expires={2}",
                                        cookie.Name,
                                        cookie.Value,
                                        cookie.Expires.ToString("ddd,dd-MMM-yyyy HH':'mm':'ss 'GMT'", CultureInfo.InvariantCulture));
     
            int flags = 0;
            if (cookie.HttpOnly)
                flags |= INTERNET_COOKIE_HTTPONLY;
            if (cookie.Secure)
                flags |= INTERNET_COOKIE_IS_SECURE;
     
            InternetSetCookieEx(url, null, data, flags, 0);
        }
    Ensuite, tu appelles WebBrowser.Navigate sur l'adresse correspondante, et normalement ça marche...

    Voilà la déclaration de InternetSetCookieEx :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    [DllImport("wininet.dll")]
    static extern InternetCookieState InternetSetCookieEx(
      string lpszURL,
      string lpszCookieName,
      string lpszCookieData,
      int dwFlags,
      int dwReserved);
     
    enum InternetCookieState : int
    {
      COOKIE_STATE_UNKNOWN     = 0x0,
      COOKIE_STATE_ACCEPT      = 0x1,
      COOKIE_STATE_PROMPT      = 0x2,
      COOKIE_STATE_LEASH       = 0x3,
      COOKIE_STATE_DOWNGRADE   = 0x4,
      COOKIE_STATE_REJECT      = 0x5,
      COOKIE_STATE_MAX         = COOKIE_STATE_REJECT 
    }
     
    const int INTERNET_COOKIE_HTTPONLY = 0x00002000;
    const int INTERNET_COOKIE_IS_SECURE = 0x01;

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 28
    Points : 18
    Points
    18
    Par défaut
    Un grand merci à toi tomlev, par contre, je sais que je vais avoir l'air d'abuser mais serait il possible d'avoir un exemple d'utilisation parce que je ne vois pas bien comme utiliser cela dans mon cas. Merci d'avance !

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par caporaldead Voir le message
    Un grand merci à toi tomlev, par contre, je sais que je vais avoir l'air d'abuser mais serait il possible d'avoir un exemple d'utilisation parce que je ne vois pas bien comme utiliser cela dans mon cas. Merci d'avance !
    Ben sans connaitre ton code je sais pas trop quoi te dire...
    En gros, après avoir fait ta requête de login, tu récupères les cookies de la HttpWebResponse obtenue, et tu les enregistres dans les cookies d'Internet Explorer avec le code que je t'ai donné

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 28
    Points : 18
    Points
    18
    Par défaut
    C'est bon tomlev j'ai réussit à me dépatouiller avec le code . Sinon moi dans le HTTPWebResponse au niveau de l'attribut cookies je n'en n'avais aucun, j'ai donc travaillé sur mon CookieContainer en changeant donc la boucle d'itération comme suit

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    foreach (Cookie cookie in m_ck.GetCookies(m_req.RequestUri))
    avec m_ck un objet de type CookieContainer passé à m_req et m_req un objet de type HttpWebRequest.

    Un grand merci à toi donc, je tag par la présente le sujet résolu.

  6. #6
    Candidat au Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2014
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2014
    Messages : 1
    Points : 2
    Points
    2
    Par défaut
    Bonjour à tous,

    J'ai besoin de me connecter à un site avec plusieurs comptes dans mon application WinForm en C# dont j'utilise le composant webBrowser.

    Ma question est :comment gérer les object WebRequest et WebResponse et comment récupérer les cookies de la réponse HTTP ?

    et merci d'avence.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Empécher la sélection du texte des pages dans un WebBrowser
    Par DevelOpeR13 dans le forum Web & réseau
    Réponses: 2
    Dernier message: 05/06/2003, 18h36
  2. Webbrowser : Comment ne pas prendre la page en cache
    Par cedm78 dans le forum Web & réseau
    Réponses: 3
    Dernier message: 30/08/2002, 11h17
  3. Détections avec WebBrowser
    Par Wazo_Sportive dans le forum Composants VCL
    Réponses: 4
    Dernier message: 11/08/2002, 19h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo