2011-12-02 5 views
42

Sono stato incaricato di utilizzare Mathematica per interagire con il server Web di una terza parte tramite JSP utilizzando HTTP POST e XML. Esempio di ciò che ho bisogno di inviare:Interazione di Mathematica 8.0 con un server Web JSP utilizzando HTTP POST e XML

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

esempio di quello che riceverò (XML):

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

ho trovato un blog by Robert Raguet-Schofield scritta nel 2009 di interagire con Twitter che utilizza J/link per accedere Java per eseguire il POST HTTP e gestire la risposta.

La mia domanda è: è questo il metodo migliore per eseguire il mio compito o Mathematica si è evoluta dal 2009 e c'è un modo migliore (più diretto) per portare a termine il mio compito?

+2

Ragfield ha anche risposto a una domanda sul POST qui: http://stackoverflow.com/q/5853134/615464 –

+1

Alcuni elementi POST si possono trovare anche in questa domanda: http://stackoverflow.com/q/8038288/615464 –

+0

Sulla base dei commenti a [risposta di Arnoud] (http://stackoverflow.com/a/8336207/198315), penso che tu sia bloccato con 'JLink' per averlo fatto. – rcollyer

risposta

1

Anche se questo potrebbe non essere un modo migliore, un approccio alternativo per aggirare la necessità di J/Link sarebbe quello di impostare uno script CGI intermedio per tradurre la richiesta da GET a POST per voi.

Questo file di script si posiziona su un server accessibile, richiede la query GET specificata, crea una richiesta POST sulla pagina di destinazione, quindi restituisce/restituisce il risultato XML nel modo normale.

Ad esempio, l'utilizzo di curl in PHP potrebbe funzionare correttamente, anche se ovviamente sarebbe possibile ottenere la stessa funzionalità in quasi tutti i linguaggi 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... 

?> 

Dal Mathematica spiccano punto di questo è molto più semplice, come è sufficiente utilizzare il costruito nel import metodo per fare un GET richiesta standard sulla pagina di proxy, ma ottenere il risultato XML da una richiesta POST sulla pagina di login.