2011-12-02 8 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.

Problemi correlati