43 votes

Interaction de Mathematica 8.0 avec un serveur web JSP utilisant HTTP POST et XML

J'ai été chargé d'utiliser Mathematica pour interagir avec le serveur web d'un tiers via JSP en utilisant HTTP POST et XML. Exemple de ce que je dois envoyer :

<html>
<head></head>
<body>
<form method="post" action="http://www. ... .com/login.jsp">
<textarea name="xml" wrap="off" cols="80" rows="30" spellcheck="false">
<loginInfo>
<param name="username" type="string">USERNAME</param>
<param name="pwd" type="string">PASSWORD</param>
</loginInfo>
</textarea>
<input type="hidden" name="Login" value="1"/>
<input type="submit" name="go" value="go" />
</form>
</body>
</html>

Exemple de ce que je vais recevoir (XML) :

<UserPluginInfo>
  <PluginInfo>
    <param name="pluginUid" type="string">1</param>
  </PluginInfo>
  <UserInfo>
     <param name="username" type="string">USERNAME</param>
  </UserInfo>
</UserPluginInfo>

J'ai trouvé un blog de Robert Raguet-Schofield écrit en 2009 sur l'interaction avec Twitter qui utilise J/Link pour accéder à Java afin d'exécuter le HTTP POST et de gérer la réponse.

Ma question est la suivante : est-ce la meilleure méthode pour accomplir ma tâche ou Mathematica a-t-il évolué depuis 2009 et existe-t-il un meilleur moyen (plus direct) d'accomplir ma tâche ?

1voto

Fraser Points 6783

Bien que ce ne soit pas une meilleure méthode, une approche alternative pour contourner le besoin de J/Link serait de mettre en place un CGI script intermédiaire pour traduire la requête de GET a POST pour vous.

Ce fichier script se trouverait sur un serveur accessible, il prendrait la requête GET spécifiée, ferait une requête POST sur la page cible, puis sortirait/renverrait le résultat XML de la manière normale.

Par exemple, en utilisant curl en PHP, cela fonctionnerait bien - bien qu'il soit évidemment possible d'obtenir la même fonctionnalité dans n'importe quel langage CGI.

<?php 
$c = curl_init();

// set the various options, Url, POST,etc
curl_setopt($c, CURLOPT_URL, "http://www. ... .com/login.jsp"); // Target page
curl_setopt($c, CURLOPT_HEADER, false);
curl_setopt($c, CURLOPT_POST, true); 
curl_setopt($c, CURLOPT_RETURNTRANSFER, false); 

// POST the incomming query to the Target Page
curl_setopt($c, CURLOPT_POSTFIELDS, $_SERVER['QUERY_STRING']); 
curl_exec($c);
curl_close($c);

// Output the XML response using header/echo/etc... 
// You might need to also send some of the POST request response headers
// use CURLOPT_HEADER to access these...

?>

Du point de vue de Mathmatica, c'est beaucoup plus simple, car il suffit d'utiliser le module intégré import pour faire une norme GET sur la page du mandataire mais obtenir le résultat XML à partir d'un fichier POST sur la page de connexion.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X