2011-12-02 12 views
42

Mam za zadanie używać Mathematica do interakcji z serwerem stron trzecich za pośrednictwem JSP przy użyciu HTTP POST i XML. Przykładem tego, co muszę wysłać:Interakcja z Mathematica 8.0 z serwerem WWW JSP przy użyciu HTTP POST i 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> 

Przykład co otrzymam (XML):

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

znalazłem blog by Robert Raguet-Schofield napisany w 2009 roku o interakcji z Twitter, który używa J/link, aby uzyskać dostęp Java, aby wykonać test POST HTTP i obsłużyć odpowiedź.

Moje pytanie brzmi: czy jest to najlepsza metoda do wykonania mojego zadania lub czy Mathematica ewoluowała od 2009 r. I czy istnieje lepszy sposób (bardziej bezpośredni) do wykonania mojego zadania?

+2

Ragfield również odpowiedział na pytanie dotyczące POST tutaj: http://stackoverflow.com/q/5853134/615464 –

+1

Niektóre materiały POST można również znaleźć w tym pytaniu: http://stackoverflow.com/q/8038288/615464 –

+0

Na podstawie komentarzy do [Arnoud's answer] (http://stackoverflow.com/a/8336207/198315), myślę, że utknąłeś z 'JLink' do robienia tego. – rcollyer

Odpowiedz

1

Chociaż może to nie być lepszy sposób, alternatywnym podejściem do obejścia potrzeby J/Link byłoby utworzenie pośredniego skryptu CGI do tłumaczenia żądania z GET na POST dla ciebie.

Ten plik skryptowy byłby dostępny na dostępnym serwerze, wymagałby określonego żądania GET, wysłania żądania POST na stronę docelową, a następnie wyprowadzenia/zwrócenia wynikowego XML w normalny sposób.

Na przykład użycie w PHP języka curl, który działałby dobrze - chociaż oczywiście byłoby możliwe uzyskanie tej samej funkcjonalności w prawie każdym języku 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... 

?> 

Z Mathematica stać punktem jest to znacznie prostsze, jak po prostu skorzystać z wbudowanego w import metody, aby standardowy GET wniosek na stronie proxy ale dostać XML wynikać z POST zamówienie na stronie logowania.

Powiązane problemy