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 !
Partager