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

ASP.NET Discussion :

Tentative avec HttpWebRequest, mais sans succès.


Sujet :

ASP.NET

  1. #1
    Membre extrêmement actif
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Points : 1 434
    Points
    1 434
    Par défaut Tentative avec HttpWebRequest, mais sans succès.
    Bonjour à tous.

    Toujours à la recherche d'une façon d'implémenter Paypal dans mon site (selon c'est pourtant simple, ben moi j'y suis depsui trois semaines !!!) je tente avec un HttpWebREquest, sauf que je connais pas et je comprends pas trés bien ce qu'il demande.

    Alors j'ai tenté un exemple simple vu que la MSDN est pas foutu de donner une exemple complet.

    J'ai un Button sur ma page et dans l'évènement click je mets ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Dim req As HttpWebRequest = WebRequest.Create("http://monsite/test.aspx")
            With req
                .Method = "POST"
                .ContentLength = 31
                .ContentType = "application/x-www-form-urlencoded"
     
            End With
            Dim streamOut As New StreamWriter(req.GetRequestStream(), System.Text.Encoding.ASCII)
            streamOut.Write("?bil=oute")
     
            Dim streamIn As New StreamReader(req.GetResponse().GetResponseStream())
            streamOut.Close()
            streamIn.Close()
    Et là, lorsque je clique sur le bouton il tourne, indéfiniment (enfin, j'ai arrêté d'attendre à 7 minutes

    Est ce qu'une âme sympathique lisant ces lignes pourriat m'éclairer sur ce que j'ai oublié de lui donner à manger pour qu'il fasse le truc simple : aller sur la page et afficher la QuesryString que je lui passe.

    Pour info, tous les exemples que j'ai trouvé sur le sujet sont en C#, donc j'ai été obligé de traduire le code. Mais vu que je parle pas courament le C#, y a certainement des erreurs.

    Merci pour votre aide.

  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 754
    Points
    39 754
    Par défaut
    A mon avis c'est parce que tu as spécifié 31 comme ContentLength, mais tu ne lui envoies que 9 caractères... donc le serveur attend la suite, puisqu'il s'attend à recevoir 31 octets.

    Il me semble que tu n'es pas obligé de spécifier le ContentLength de toutes façons, si tu ne dis rien il devrait se débrouiller sans.

    Si tu veux le spécifier quand même, il faut d'abord calculer la longueur en octets de ce que tu vas envoyer.

    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
        Dim bytes As Bytes() = System.Text.Encoding.ASCII.GetBytes("?bil=oute")
     
            Dim req As HttpWebRequest = WebRequest.Create("http://monsite/test.aspx")
            With req
                .Method = "POST"
                .ContentLength = bytes.Length
                .ContentType = "application/x-www-form-urlencoded"
            End With
            Dim streamOut As Stream = req.GetRequestStream()
            streamOut.Write(bytes, 0, bytes.Length)
            streamOut.Close()
     
            Dim streamIn As New StreamReader(req.GetResponse().GetResponseStream())
            Dim response As String = streamIn.ReadAlltext()
            streamIn.Close()
    D'autre part il faut aussi fermer le flux de la requête avant d'essayer d'obtenir la réponse

  3. #3
    Membre extrêmement actif
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Points : 1 434
    Points
    1 434
    Par défaut
    Merci Tomlev.

    Je découvre plein de truc là, je suis content.

    J'ai un premier souci avec Bytes(). Si j'enlève le S, ça sinon il em dit que c'est un "type non défini". Mais est ce bien la même chose ?

    Ensuite j'ai un souci sur le Response à la fin. Il me dit que ReadAllTextn'es pas un membre de System.IO.StreamReader. Sauf que là, je ne sais pas quoi lui donner à la place.

    Du coup, je peux pas tester tant qu'il y a cette erreur. Vu que Response n'est pas utilisé, je suis obligé de le mettre ?

    Je commence à comprendre le principe de la chose.

    J'ai une question sur l'arrivée : dans la chaine que j'envoi c'est une QueryString, mais est ce que je récupère bien avec un Request.QueryString ou avec un Request.From ?

    EDIT : je viens de remplacer ReadAllText par ReadToEnd (chose la plus approchante que j'ai trouvé). Lorsque je click sur le bouton il reboucle sur la même page et je ne va pas sur la page indiquée. C'est normal ?
    ou je dois faire un truc avec le Response ?

  4. #4
    Rédacteur
    Avatar de lutecefalco
    Profil pro
    zadzdzddzdzd
    Inscrit en
    Juillet 2005
    Messages
    5 052
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : zadzdzddzdzd

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 052
    Points : 8 734
    Points
    8 734
    Par défaut
    Citation Envoyé par zooffy Voir le message
    Lorsque je click sur le bouton il reboucle sur la même page et je ne va pas sur la page indiquée. C'est normal ?
    ou je dois faire un truc avec le Response ?
    C'est normal. Là tu simules l'appel à une page en code behind, tu ne demandes pas au navigateur de l'afficher

    Tout le rendu HTML de la page en question se trouve dans ta variable response

  5. #5
    Membre extrêmement actif
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Points : 1 434
    Points
    1 434
    Par défaut
    Merci LuteceFalco

    Alors qu'est ce que je fais de Response ?

    Et surtout, parce que là je fais un test tout bête d'envoi d'une connerie pour voir si ça fais un truc, est ce qu'aprés je peux simuler l'envoi d'un formulaire avec des vraies info vers Paypal ?

    La vraie question est là.

    C'est dingue de pas trouver de site en ASP.NET qui utilise Paypal. J'avais eu la même galère avec AlloPass. Qu'est ce que ces gens ont contre .NET ?

    Merci pour votre aide les gars.

  6. #6
    Rédacteur
    Avatar de lutecefalco
    Profil pro
    zadzdzddzdzd
    Inscrit en
    Juillet 2005
    Messages
    5 052
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : zadzdzddzdzd

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 052
    Points : 8 734
    Points
    8 734
    Par défaut
    Citation Envoyé par zooffy Voir le message
    Alors qu'est ce que je fais de Response ?
    J'en sais rien.
    Si PayPal est censé afficher un code, tu peux parser response pour voir si code est bien présent

  7. #7
    Membre extrêmement actif
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Points : 1 434
    Points
    1 434
    Par défaut
    Ma question sur Response était dans l'absolu. Pour Paypal, je verrais quand j'aurais compris comment ça marche avec un test tout simple. Au niveau de Paypal, tu es transporter sur leur site avec des informations dans un Form pour savoir que ça vient de ton site et combien faut payer.

    Mais avant je voudrais savoir : Parser Response : ça veux dire quoi ?


    Pour illustration, Paypal te file un Form comme ça à mettre dans ta page :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <form action='https://www.paypal.com/cgi-bin/webscr' method='post'>
    <input type='hidden' name='cmd' value='_s-xclick'>
    <input type='hidden' name='hosted_button_id' value='6NRAPC7UMG7SS'>
    <input type='image' src='http://www.general-meet.com/App_Themes/Generalmeet/AcheterPack.gif' border='0' name='submit' alt='PayPal - la solution de paiement en ligne la plus simple et la plus sécurisée !'>
    <img alt='' border='0' src='https://www.paypal.com/fr_FR/i/scr/pixel.gif' width='1' height='1'>
    </form>
    ça tu es censé le coller dans ta page, et ça fait apparaitre un bouton. Lorsque tu clique sur le bouton ça t'envoi sur le site de Paypal. Sauf que lorsque tu mets un Form dans un page ASPX ça marche pas puisqu'il y a un form qui existe au desus !!!
    Et chez Paypal, tu pose la question et ils te répndent pas, du tout. ça fait trois semaines que j'envoi un mail tous les matins leur demandant comment on fait pour metre leur solution sur un site en ASP.NET et je n'ai aucune réponse, rien, que dalle.

    Donc ça fait trois semaines que j'explore des solution de contournement, que je me débat comme un malade en essayant de comprendre des trucs qui sont pas de mon niveau, pour lesquels je n'ai pas de connaissance ou de compétence.
    Et en plus, tous les trucs que je trouve sont en C# et sont super méga étendu et me propose des solutions super méga bien foutu alors que je cherche le truc tout simple, tout bête : poser le bouton et être envoyer sur le site de Paypal, rien de plus.

    Je suis au bord de la dépression, en fait.

    Merci pour ton aide.

  8. #8
    Rédacteur
    Avatar de lutecefalco
    Profil pro
    zadzdzddzdzd
    Inscrit en
    Juillet 2005
    Messages
    5 052
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : zadzdzddzdzd

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 052
    Points : 8 734
    Points
    8 734
    Par défaut
    T'as besoin d'une page aspx? Si non, mets ça dans une simple page html et ça devrait fonctionner

  9. #9
    Membre extrêmement actif
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Points : 1 434
    Points
    1 434
    Par défaut
    Oui, j'ai impérativement besoin d'une page ASPX et surtout de pouvoir poster le formulaire Paypal à partir d'un Button ou d'un Image Button.

    Mais je crois que j'ai enfin trouvé un truc en VB qui à l'air de marcher. J'arrive à faire le voyage aller, mais pas le retour.

    Par contre, pour revenir au sujet d ebase, parce que le fonctionnement du HttpWebRequest m'interresse : je reviens sur le Response, j'en fais quoi exactement ?

    Je vois pas ce que c'est "parser".

    Il faut tout de même que je comprenne ce truc parce que ça à l'air interressant et j'en vois pas mal avec mes recherches.
    Faut que je comprenne ce que j'envoi, comment je l'envoi et ce qui revient.

    Merci pour ton aide.

  10. #10
    Expert éminent
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Points : 9 506
    Points
    9 506
    Par défaut
    Salut
    Citation Envoyé par zooffy Voir le message
    Je vois pas ce que c'est "parser".
    Paser c'est un "abus" de langage pour dire "décortiquer", "analyser", "convertir".

    Une requête Http simule le comportement d'un navigateur. Tu appelles une URL et tu reçois en réponse le flux (code HTML) renvoyé par le serveur. En "parsant" la réponse, tu analyse la chaine de caractère pour trouver ce que tu cherches.
    Ce code prend une url en entrée et renvoi la chaine de caractère en réponse.
    Code csharp : 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
    22
    23
    24
    25
    26
    private static string Request(Uri uri)
    {
        string answer = string.Empty;
     
        HttpWebRequest req = (HttpWebRequest)WebRequest.Create(uri);
        try
        {
            using (HttpWebResponse res = (HttpWebResponse)req.GetResponse())
            {
                if (req.HaveResponse && res.StatusCode == HttpStatusCode.OK)
                    using (Stream resin = res.GetResponseStream())
                    {
                        using (StreamReader rea = new StreamReader(resin))
                        {
                            answer = rea.ReadToEnd();
                        }
                    }
            }
        }
        catch
        {
     
        }
     
        return answer;
    }

    Mets le dans une page web toute propre et mets
    Code csharp : Sélectionner tout - Visualiser dans une fenêtre à part
    Response.Write(Request(new Uri("http://www.google.fr/")));
    dans le Page_Load pour voir

    A+


    [EDIT]
    Je pense quand même que tu devrais te renseigner (utiliser) sur les services web de PayPal: https://cms.paypal.com/cms_content/U..._Reference.pdf

    Tu références le web service dans VS. Le reste est un jeu d'enfant.
    [/EDIT]

  11. #11
    Membre extrêmement actif
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Points : 1 434
    Points
    1 434
    Par défaut
    Merci Immobilis

    Je vais tester ton bout de code (une fois que je l'aurais traduit en VB, je vais avoir des surprises).

    Ce que j'ai pas compris dans le HttpWebRequest, outre le retour à "parser" c'est que sur la apge de destination il exécute les choses que j'ai programmé dans le CodeBehind. Mais bon, avec ton exemple je vais peut-être mieux capter.

    Par contre, le "jeu d'enfant" sur le PDF que tu ma donne, j'ai toujours des doutes. C'est toujours simple quand tu maitrise un sujet.
    Mais bon je vais suivre les indications pour voir ce que j'arrive à en faire. Enfin, quand j'aurais réussi à afficher le PDF parce que là, il veut pas !!!
    En plus ça à l'air en anglais, donc double diffculté pour moi.

  12. #12
    Membre extrêmement actif
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Points : 1 434
    Points
    1 434
    Par défaut
    Alors j'ai testé le bout de code. C'est cool j'ai la page Google dans ma page !!!
    Sauf que j'ai pas les images, mais ça me parait normal.

    Du coup, j'ai poussé plus loin. Et là je suis confronté à un souci de compréhension.
    J'ai fait la même chose mais en changeant la ligne du Load :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    lblTest.Text = RequestTest(New Uri("http://monsite/testweb.aspx"))
    En le mettant dans un label, ça marche pareil, j'ai la page dedans, tout simplement. Donc cela me renvoi une chaine constituée d'un flux HTML complet.

    Maintenant je corse le truc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    lblTest.Text = RequestTest(New Uri("http://monsite/testweb.aspx?bil=oute"))
    Et dans la page de destination je fais ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
            If Request.QueryString("bil") = "oute" Then
                lbltest.Text = "Gagné"
            Else
                lbltest.Text = "Perdu"
            End If
        End Sub
    Là, j'ai "Gagné" qui apparait. Si je change la Querystring, forcément j'ai "Perdu "qui apparait.

    Alors maintenant question :
    - Comment j'envoi des paramettres autement qu'en mettant dans la QueryString de l'url recherchée ?
    - Comment je gère le renvoi de la chaine ?
    - Est ce que tout ce que je met dans la page de destination sera exécuté avant de me renvoyer la chaine de retour ?

  13. #13
    Expert éminent
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Points : 9 506
    Points
    9 506
    Par défaut
    En fait, j'ai fait un petit bout de code qui me met la puce à l'oreille.

    Fais un petit bond dans le passé. Retourne le 26/07 à 16h31 (date de ton premier post). Dans le code que tu fournis:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim streamOut As New StreamWriter(req.GetRequestStream(), System.Text.Encoding.ASCII)
    streamOut.Write("?bil=oute")
    Enlève le "?" et essayes encore.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    streamOut.Write("bil=oute")
    Dis-moi.

    A+

    Sinon
    Citation Envoyé par zooffy Voir le message
    Alors maintenant question :
    - Comment j'envoi des paramettres autement qu'en mettant dans la QueryString de l'url recherchée ?
    - Comment je gère le renvoi de la chaine ?
    - Est ce que tout ce que je met dans la page de destination sera exécuté avant de me renvoyer la chaine de retour ?
    • Envoyer où?
    • Tu fais un "Response.Write()" de la chaine à afficher (au lieu de hello world par exemple. Le bout de code qui fait la requête récupère en réponse ce qui est écrit par ta page
    • Oui

  14. #14
    Membre extrêmement actif
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Points : 1 434
    Points
    1 434
    Par défaut
    Bon, alors maintenant j'en suis à ça comme code dans la page de base et je n'ai rien changé à la page de destination :
    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
     
    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
            Dim bytes As Byte() = System.Text.Encoding.ASCII.GetBytes("bil=oute")
            Dim req As HttpWebRequest = WebRequest.Create("http://monsite/testweb.aspx")
            With req
                .Method = "POST"
                .ContentLength = bytes.Length
                .ContentType = "application/x-www-form-urlencoded"
            End With
            Dim streamOut As Stream = req.GetRequestStream()
            streamOut.Write(bytes, 0, bytes.Length)
            streamOut.Close()
     
            Dim streamIn As New StreamReader(req.GetResponse().GetResponseStream())
            Dim response As String = streamIn.ReadToEnd
            streamIn.Close()
            lblTest.Text = response
     
        End Sub
    Avec ou sans ? j'ai toujours "Perdu".

    Reprenons mes trois questions :
    - Envoyer vers la page de destination pour lui faire faire des choses en fonction de différents paramètres, un identifiant pour recherche dans la BDD, une action à faire en fonction d'un nom ou d'une chaine, envoyer une mail avec une adresse fournie, ...
    L'idée c'est que crois voir des paramettres envoyés en Querystring, mais cela ne fonctionne pas (sinon, j'aurais "Gagné"). J4ai essayé de des REquest.Form dans la page de Destination, mais cela ne marche pas mieux.

    - La récupération OK, j'ai compris maintenant. C'est une chaine de caractère générée par la page de destination et j'analyse comme je veux en fonction de ce que je renvoi pour trouver ce que je cherche. Dac, pas la peine d'y revenir.

    - Ok ici aussi, je crois que j'ai compris. Tout le code que je place est exécuté. Si le traitement est long, la page atend d'avoir fini avant de renvoyer la réponse ? Le timeOut se gère comme sur une page normale ?

    Bon merci pour ton aide. Il me reste plus qu'à comprendre comment envoyer des paramètres à cette page et j'aurais tout compris.

Discussions similaires

  1. Réponses: 3
    Dernier message: 26/11/2010, 08h03
  2. Réponses: 4
    Dernier message: 06/04/2010, 10h36
  3. Réponses: 4
    Dernier message: 11/05/2009, 15h59
  4. Requete avec count mais sans grouper.
    Par fabrice91 dans le forum Requêtes
    Réponses: 19
    Dernier message: 29/04/2009, 16h25

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