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

Entrée/Sortie Java Discussion :

HttpClient - Exécution d'une fonction JavaScript


Sujet :

Entrée/Sortie Java

  1. #1
    Membre régulier
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 54
    Points : 77
    Points
    77
    Par défaut HttpClient - Exécution d'une fonction JavaScript
    Bonjour à tous,

    J'espère ne pas m'être trompé de section. Je vous présente donc mon problème.

    J'utilise l'API HttpClient afin de me logger d'abord et ensuite naviguer sur un site en récupérant notamment les différents liens contenus dans les "href" (ceux-ci changeant très régulièrement, je ne peux les coder en dur). Néanmoins, je bloque sur l'exécution d'une fonction JavaScript sur un "OnClick" me permettant d'effectuer une action sur ce site et de mettre à jour les informations que je lis sur la page. Cette fonction requiert notamment des paramètres situés au niveau de champs "hidden", que je passe donc en paramètre de ma fonction POST dans mon code Java.

    Sous Firefox, il m'est possible d'éxécuter une fonction Javascript ne nécessitant pas d'info complémentaires autres que les paramètres de la fonction en l'écrivant simplement dans la barre d'adresse juste après m'être rendu sur le site, mais cela n'est vraisemblablement pas géré par l'API HttpClient.

    Voici d'abord le code la page :

    <form name="FormMove" method="post" target="_parent" action="./?central=4">
    <input type="button" class="bouton" name="move" OnClick="javascript:move(3, 74)" value="Aller">
    <input type="hidden" name="A" value="4">
    <input type="hidden" name="B" value="5">
    <input type="hidden" name="C" value="0">
    <input type="hidden" name="move" value="1">
    <input type="hidden" name="BcF" value="5">
    <input type="hidden" name="Big" value="9"> </form>

    Voici mon code incomplet puisque je ne sais pas gérer ce fichu "OnClick". A ce stade, je suis correctement loggé et l'API gère donc correctement les cookies envoyés par le serveur. J'ai bien sûr essayé plusieurs url pour ma méthode POST :

    public void move(String A, String B, String C){

    GetMethod go = new GetMethod("http://www.monsite.com/?central=4");
    PostMethod move = new PostMethod("javascript:move(3,74);"); // cette ligne ne fonctionne pas et retourne une Exception !
    move.setDoAuthentication(true);
    move.addParameter("A", A);
    move.addParameter("B", B);
    move.addParameter("C", C);
    move.addParameter("move", "1");
    move.addParameter("BcF", "3");
    move.addParameter("Big", "3");
    try{
    int statusGo = client.executeMethod(go);
    int statusMove = client.executeMethod(move);
    }
    catch (Exception e) {
    e.printStackTrace();
    }

    finally {
    move.releaseConnection();
    go.releaseConnection();
    }

    Voici l'erreur retournée à l'exécution :
    Exception in thread "main" java.lang.IllegalStateException: unsupported protocol: 'javascript'
    at org.apache.commons.httpclient.protocol.Protocol.lazyRegisterProtocol(Protocol.java:149)
    at org.apache.commons.httpclient.protocol.Protocol.getProtocol(Protocol.java:117)
    at org.apache.commons.httpclient.HttpHost.<init>(HttpHost.java:107)
    at org.apache.commons.httpclient.HttpMethodBase.setURI(HttpMethodBase.java:280)
    at org.apache.commons.httpclient.HttpMethodBase.<init>(HttpMethodBase.java:220)
    at org.apache.commons.httpclient.methods.ExpectContinueMethod.<init>(ExpectContinueMethod.java:93)
    at org.apache.commons.httpclient.methods.EntityEnclosingMethod.<init>(EntityEnclosingMethod.java:119)
    at org.apache.commons.httpclient.methods.PostMethod.<init>(PostMethod.java:106)
    at Test_depl.move(Test_depl.java:34)
    at Test_depl.main(Test_depl.java:20)

    Merci infiniment de m'éclairer pour savoir s'il est possible de résoudre ce problème en utilisant cette même API assez facile à utiliser ou même en m'indiquant d'autres moyens, en Java ou dans un autre langage !

  2. #2
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Points : 7 163
    Points
    7 163
    Par défaut
    HTTPClient ne gère pas le Javascript. Il gère les requêtes/réponses HTTP, c'est tout. Il ne sait pas interpréter les données qui transitent.
    Tu dois simuler le code javascript via ton code, puisque javascript est du code côté client.
    Que fait cette fonction "move" ?

  3. #3
    Membre régulier
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 54
    Points : 77
    Points
    77
    Par défaut
    Il s'agit d'un bête jeu. En cliquant sur le bouton correspondant, le personnage se déplace sur la position des champs "hidden". Il recharge donc la page courante, avec la nouvelle carte...

    Si je peux pallier d'une manière ou d'une autre à cette carence de HttpClient, je suis preneur !

    Merci

  4. #4
    Membre chevronné
    Homme Profil pro
    Dév. Java & C#
    Inscrit en
    Octobre 2002
    Messages
    1 414
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dév. Java & C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 414
    Points : 1 996
    Points
    1 996
    Par défaut
    Citation Envoyé par Vakhyw Voir le message
    Si je peux pallier d'une manière ou d'une autre à cette carence de HttpClient, je suis preneur !
    HttpClient n'a aucune carence. C'est un moteur pour les requêtes HTTP. Voir le site de HttpClient.

    Pour ton problème, tu as besoin de deux "composants" supplémentaires.
    1. Un composant permettant de lire une structure HTML (Par exemple: JTidy pour la création du DOM)
    2. Un interpréteur Javascript pour java (Par exemple Rhino)


    Il faut créer les "ponts" entre les différents composants.

    En faisant une recherchde dans ce forum, je su stombé su ce fil de discution java, et interpretation de javascript.

    En espérant avoir répondu à tes questions

Discussions similaires

  1. Réponses: 0
    Dernier message: 23/02/2011, 01h06
  2. Exécution d'une fonction javascript
    Par NicolasR dans le forum ASP.NET
    Réponses: 3
    Dernier message: 21/04/2008, 16h20
  3. Exécution d'une fonction ruby/rails à partir de javascript
    Par pjmorce dans le forum Ruby on Rails
    Réponses: 6
    Dernier message: 27/02/2008, 10h35
  4. Réponses: 2
    Dernier message: 16/07/2007, 16h04
  5. [curseur] modification curseur pdt exécution d'une fonction javascript
    Par NikoBe dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 04/04/2007, 19h31

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