Взаимодействие Mathematica 8.0 с JSP веб-сервера с использованием HTTP POST и XML - PullRequest
42 голосов
/ 03 декабря 2011

Мне было поручено использовать Mathematica для взаимодействия со сторонним веб-сервером через JSP с использованием HTTP POST и 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>

Пример того, что я получу (XML):

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

Я нашел блог от Robert Raguet-Schofield написано в 2009 году о взаимодействии с Twitter, который использует J / Link для доступа к Java для выполнения HTTP POST и обработки ответа.

Мой вопрос заключается в том, является ли это лучшим методом для выполнения моей задачи или Mathematica развивалась с 2009 года, и есть лучший способ (более прямой) для выполнения моей задачи?

1 Ответ

1 голос
/ 21 февраля 2012

Хотя это может быть и не лучшим способом, альтернативный подход, позволяющий обойти необходимость J / Link, заключался бы в настройке промежуточного сценария CGI для перевода запроса с GET на POST для вас.

Этот файл сценария будет находиться на доступном сервере, он будет принимать указанный запрос GET, делать запрос POST на целевой странице, а затем выводить / возвращать XML-результат в обычном порядке.

Например, использование curl в PHP, которое будет работать хорошо - хотя, очевидно, было бы возможно достичь той же функциональности практически в любом языке 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...

?>

С точки зрения Mathmatica это намного проще, поскольку вы просто используете встроенный метод import для выполнения стандартного GET запроса на странице прокси, но получаете XML-результат из запроса POST на странице входа в систему. .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...