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

Dotnet Discussion :

Connecter à un site Via la methode Post avec paramétres


Sujet :

Dotnet

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Octobre 2012
    Messages : 42
    Points : 18
    Points
    18
    Par défaut Connecter à un site Via la methode Post avec paramétres
    Bonjour,
    Je cherche à développer une fonction sous VB.net qui permet de se connecter à un site web via la méthode POST
    Le but c'est de récupérer d'un annuaire la liste des entreprises ainsi leur num de téléphone.
    var1 , var 2 ... presentent le code postale et numero de page et d'autres variables ....
    Ce que j'ai trouvé sur le net :

    Public Sub recup_annuaire()
    Dim strNewValue As String
    Dim strResponse As String
    ' Create the request obj
    Dim req As HttpWebRequest = DirectCast(WebRequest.Create("http://exemple.com/searchList.do"), HttpWebRequest)
    req.Method = "POST"
    req.ContentType = "application/x-www-form-urlencoded"
    strNewValue = "var1=1&var2=0&var3=3......"
    req.ContentLength = strNewValue.Length
    ' Write the request
    Dim stOut As StreamWriter = New StreamWriter(req.GetRequestStream(), System.Text.Encoding.ASCII)
    stOut.Write(strNewValue)
    stOut.Close()
    ' Do the request to get the response
    Dim stIn As StreamReader = New StreamReader(req.GetResponse().GetResponseStream())
    strResponse = stIn.ReadToEnd()
    stIn.Close()
    End Sub

    Le resultat que j'ai obtenu c'est le code source de la page http://exemple.com/searchList.do sans prendre en considération les paramétres var1,var2 ...
    Quelqu'un pour m'aider , ça fait plusieurs jours que je suis bloqué
    Merci

  2. #2
    Membre éclairé
    Homme Profil pro
    Développeur / architecte
    Inscrit en
    Juillet 2009
    Messages
    473
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur / architecte

    Informations forums :
    Inscription : Juillet 2009
    Messages : 473
    Points : 674
    Points
    674
    Par défaut
    C'est pas très précis comme question: quel est le type de service que tu attaques? Comment est-tu sensé passer les paramètres? Dans le corps ou dans l'URL?

  3. #3
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Octobre 2012
    Messages : 42
    Points : 18
    Points
    18
    Par défaut
    En gros : y a un annuaire qui contient une liste des personnes et des entreprises de Luxembourg précisément.
    Je veux récupérer la liste des entreprises seulement j'ai donc chercher dans le code source de la page pour pouvoir enfin trouver la fonction et les variables pour afficher seulement les entreprises qui est celle ci :

    function Private(language,input,idRubrique,idProduit,idLocalite,prive,orderName,orderDirection) {
    ShowLoader();
    $.post(
    "/ed/searchList.do",
    {
    language:language,
    input:encodeURIComponent(input),
    idRubrique:idRubrique,
    idProduit:idProduit,
    idLocalite:idLocalite,
    prive:1,
    orderName:orderName,
    orderDirection:orderDirection,
    explainexplain == false)?0:1
    },
    function(data) {
    $("#ctRes").remove();
    $("#results").prepend(data);
    HideLoader();
    replaceFilter(500,true);
    resizeFilter();
    }
    );

    Je veux donc faire une fonction qui à chaque fois change ces paramétrés et d'afficher les contenu de la page et je souhaite passer les paramétrés dans le corps et non dans l'URL Via la méthode POST.
    Suis-je assez claire maintenant ?
    Merci d'avance.

  4. #4
    Membre éclairé
    Homme Profil pro
    Développeur / architecte
    Inscrit en
    Juillet 2009
    Messages
    473
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur / architecte

    Informations forums :
    Inscription : Juillet 2009
    Messages : 473
    Points : 674
    Points
    674
    Par défaut
    Si j'ai bien compris, c'est du jquery le code que tu as extrait.
    Le problème c'est l'encodage des données. Or celui-ci n'est pas donné. Si tu regardes les specs de post, on voit que si le paramètre datatype n'est pas donné, il est déduit.
    Et vu la tête de ce qui est fait dans le code, je dirait à vu de nez que c'est du json.
    Pour en être sûr tu peux utiliser fiddler pour tracer les flux HTTP.
    Donc le contenu de ce que tu veux envoyer en .NET doit également être du json (à part si le serveur supporte plusieurs formats). En .NET, tu peux utiliser Json.NET par exemple.
    (Tu essayais de construire un contenu qui ressemble étrangement aux paramètres dans une URL.)

  5. #5
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Octobre 2012
    Messages : 42
    Points : 18
    Points
    18
    Par défaut
    Bonjour chrisdot
    Je suis arrivé à résoudre le probléme c'est à dire afficher le contenu de la page via la methode poste
    Maintenant j'ai un code source de la page en html qui contient plusieurs balises par exemple :

    <h2 class="nameCli">" <a href="http://www.xxxxxxxx> nom 1 </a>"
    <div class="addr"><ul> <li> adresse 1 </li>"
    <li class="call"> <span>Tél. :</span> num 1 </li>"


    <h2 class="nameCli">" <a href="http://www.xxxxxxxx> nom 2 </a>"
    <div class="addr"><ul> <li> adresse 2 </li>"
    <li class="call"> <span>Tél. :</span> num 2 </li>"


    <h2 class="nameCli">" <a href="http://www.xxxxxxxx> nom 3 </a>"
    <div class="addr"><ul> <li> adresse 3 </li>"
    <li class="call"> <span>Tél. :</span> num 3 </li>"


    Je veux avoir dans un fichier cette forme :
    nom1 , adresse 1 , num 1
    nom2 , adresse 2 , num 2
    nom3 , adresse 3 , num 3

    Est-ce possible ?

  6. #6
    Membre éclairé
    Homme Profil pro
    Développeur / architecte
    Inscrit en
    Juillet 2009
    Messages
    473
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur / architecte

    Informations forums :
    Inscription : Juillet 2009
    Messages : 473
    Points : 674
    Points
    674
    Par défaut
    Nouveau problème = nouveau thread, non? Celui-ci est résolu.
    Et comment as-tu résolu le problème précedent?
    Tu voudrais extraire/parser du html si j'ai bien compris?

  7. #7
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Octobre 2012
    Messages : 42
    Points : 18
    Points
    18
    Par défaut
    Cette fontion fonctionne bien :
    Function WRequest(ByVal URL As String, ByVal method As String, ByVal POSTdata As String) As String
    Dim responseData As String = ""
    Try
    Dim hwrequest As Net.HttpWebRequest = Net.Webrequest.Create(URL)
    hwrequest.Accept = "*/*"
    hwrequest.AllowAutoRedirect = True
    hwrequest.UserAgent = "http_requester/0.1"
    hwrequest.Timeout = 60000
    hwrequest.Method = method
    If hwrequest.Method = "POST" Then
    hwrequest.ContentType = "application/x-www-form-urlencoded"
    Dim encoding As New Text.ASCIIEncoding() 'Use UTF8Encoding for XML requests
    Dim postByteArray() As Byte = encoding.GetBytes(POSTdata)
    hwrequest.ContentLength = postByteArray.Length
    Dim postStream As IO.Stream = hwrequest.GetRequestStream()
    postStream.Write(postByteArray, 0, postByteArray.Length)
    postStream.Close()
    End If
    Dim hwresponse As Net.HttpWebResponse = hwrequest.GetResponse()
    If hwresponse.StatusCode = Net.HttpStatusCode.OK Then
    Dim responseStream As IO.StreamReader = _
    New IO.StreamReader(hwresponse.GetResponseStream())
    responseData = responseStream.ReadToEnd()
    End If
    hwresponse.Close()
    Catch e As Exception
    responseData = "An error occurred: " & e.Message
    End Try
    Return responseData
    End Function


    Et pour mon 2eme thread

    J'ai déjà trouver ce genre de code mais il ne répond pas exactement à mon problème.
    J'ai deux problèmes en fait :

    1) Les informations dont j'ai besoin ne sont pas du style : <a href= "nom1"/> par exemple mais plutot <a href="xxxxx"> nom1 </a> puis

    <div class="addr">
    <ul><li>adresse 1</li></ul>
    <ul> <li class="call"><span>Tél. :</span> num1 </li></ul>
    </div>



    2) parfois il y a des entreprise qui mettent leurs numéro de téléphones et d'autres non
    donc la balise <span>Tél. :</span> n'existe pas parfois.


    Ce que j'ai trouvé c'est :
    Protected Sub parseHTML(ByRef HTML As String)
    Dim pattern As String = "[<a href]([^>]+)[><div ]([^>]+)[></a>]"
    Dim matches As MatchCollection = Regex.Matches(HTML, pattern)
    For Each match As Match In matches
    Debug.WriteLine("HREF " & match.Groups(1).Value)
    Debug.WriteLine("div " & match.Groups(2).Value)
    Next
    End Sub
    Et biensur ca ne marche pas puisqu'il y a une centaine de div dans le code source
    Une idée ?

  8. #8
    Membre éclairé
    Homme Profil pro
    Développeur / architecte
    Inscrit en
    Juillet 2009
    Messages
    473
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur / architecte

    Informations forums :
    Inscription : Juillet 2009
    Messages : 473
    Points : 674
    Points
    674
    Par défaut
    As-tu essayé si le service accepte de fournir d'autres formats de réponse?
    Genre en essayant de remplacer:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    hwrequest.Accept = "*/*"
    Par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    hwrequest.Accept = "*/json"
    Ou:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    hwrequest.Accept = "*/xml"
    Ou autres formats?

    Ca te faciliterait grandement la vie.

    Sinon, c'est assez complexe de parser du HTML, mais tu peux voir avec la librarie HtmlAgility pack.

  9. #9
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Octobre 2012
    Messages : 42
    Points : 18
    Points
    18
    Par défaut
    Oui il accepte json mais xml il affiche un message d'erreur
    Comment est-ce possible avec json de résoudre mon problème ?

  10. #10
    Membre éclairé
    Homme Profil pro
    Développeur / architecte
    Inscrit en
    Juillet 2009
    Messages
    473
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur / architecte

    Informations forums :
    Inscription : Juillet 2009
    Messages : 473
    Points : 674
    Points
    674
    Par défaut
    Merci d'être plus précis. Il te renvoie du json et tu sais pas comment le traiter?

  11. #11
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Octobre 2012
    Messages : 42
    Points : 18
    Points
    18
    Par défaut
    J'ai enregistré le code source sous un format Json
    Quand je l'ouvre avec firefox il m'affiche s'une maniére claire le contenu de mon code source c'est à dire
    Nom 1
    Adresse 1
    num 1
    Nom 2
    Adresse 2
    num 3

    Mais je ne sais pas quoi faire pour enfin arriver au resultat final cad :
    nom1 , adresse 1 , num 1
    nom2 , adresse 2 , num 2
    nom3 , adresse 3 , num 3
    Pour pouvoir ensuite l'exporter dans une base de données

Discussions similaires

  1. Methode Post avec JSON et parametre
    Par mattmax dans le forum VB.NET
    Réponses: 0
    Dernier message: 11/12/2013, 15h03
  2. [Débutant] Methode Post avec un fichier JSON
    Par mattmax dans le forum VB.NET
    Réponses: 8
    Dernier message: 06/11/2013, 09h20
  3. Se logger sur un site via la méthode post
    Par limp57 dans le forum Général Java
    Réponses: 6
    Dernier message: 30/09/2012, 22h13
  4. [HTTP]passage de parametres via la methode post
    Par abdou.sahraoui dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 03/03/2008, 14h11
  5. [HTTP] Passage d'image via la methode post
    Par muldoon dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 26/05/2005, 09h05

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