Подтвердить что ты не робот

Взаимодействие Mathematica 8.0 с веб-сервером JSP с использованием HTTP POST и XML

Мне было поручено использовать 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>

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

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

4b9b3361

Ответ 1

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

Этот файл script будет размещаться на доступном сервере, он будет выполнять заданный запрос 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 на странице входа в систему.