Описание работы HTTP-терминала в общем случае:
Оглавление |
---|
1. Установление сессии
Для создания сессии нужно отправить POST-запрос командой http(s)://<ServerIP>:<ServerPort>/system/login
вида:
...
Блок кода | ||
---|---|---|
| ||
<?xml version="1.0"?> <out xmlns:xs="http://www.w3.org/2001/XMLSchema-instance" xs:noNamespaceSchemaLocation="login.xsd"> <settings md="md1" ds="ds1" version="3.10.0.36"/> </out> |
2. Выполнение команд, периодические ping-запросы
HTTP-терминал позволяет отправлять по http в рамках одной сессии несколько параллельных запросов. Для того чтобы отличать ответы на данные запросы, в заголовке запросов можно разместить параметр "P-Request-Id", значение которого будет протранслировано в ответе.
...
Запросы должны содержать token в cookie запроса. В случае успешного продления сессии возвращается код 200. Если сессия с данным token не найдена - вернется 404.
3. Завершение сессии
Чтобы завершить сессию со стороны клиента, необходимо на сервер отправить команду:
...
В случае успешного logout придет ответ 200. Если сессия не найдена - вернется 404.
4. Пример кода на Java для работы с HTTP-терминалом
Блок кода | ||
---|---|---|
| ||
import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.client.CookieStore; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; import org.apache.http.cookie.Cookie; import org.apache.http.entity.ByteArrayEntity; import org.apache.http.impl.client.BasicCookieStore; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.impl.cookie.BasicClientCookie; import org.apache.http.util.EntityUtils; import java.io.IOException; /** * Elemental example for executing multiple POST requests sequentially. */ public class Main { public static void main(String[] args) throws Exception { String host = "http://192.168.23.87:9999"; CookieStore cookie = login("ssw", "ssw", host); if (isActive(cookie, host)) { uptime(cookie, host); logout(cookie, host); } } private static CookieStore login(String login, String password, String host) throws IOException { CookieStore cookieStore = new BasicCookieStore(); CloseableHttpClient client = HttpClients.custom() .setDefaultCookieStore(cookieStore) .build(); HttpPost httpPost = new HttpPost(host + "/system/login"); httpPost.setHeader("Content-Type", "text/xml"); String xml = "<in><login user = \"" + login + "\" password=\"" + password + "\" /></in>"; HttpEntity entity = new ByteArrayEntity(xml.getBytes("UTF-8")); httpPost.setEntity(entity); HttpResponse response = client.execute(httpPost); String loginResult = EntityUtils.toString(response.getEntity()); int loginResultCode = response.getStatusLine().getStatusCode(); System.out.println("Login rc " + loginResultCode); System.out.println("Login result " + loginResult); CookieStore resultCookieStore = new BasicCookieStore(); for (Cookie c : cookieStore.getCookies()) { if (c.getName().equals("token") && c instanceof BasicClientCookie) { // Нужно для того, чтобы token применялся для всех ((BasicClientCookie)c).setPath("/"); resultCookieStore.addCookie(c); return resultCookieStore; } } return cookieStore; } private static boolean isActive(CookieStore cookieStore, String host) throws IOException { CloseableHttpClient client = HttpClients.custom() .setDefaultCookieStore(cookieStore) .build(); HttpGet httpGet = new HttpGet(host + "/system/is_active"); HttpResponse response = client.execute(httpGet); int isActiveResultCode = response.getStatusLine().getStatusCode(); System.out.println("Is Active rc " + isActiveResultCode); return isActiveResultCode == 200; } private static void uptime(CookieStore cookieStore, String host) throws IOException { CloseableHttpClient client = HttpClients.custom() .setDefaultCookieStore(cookieStore) .build(); HttpPost httpPost = new HttpPost(host + "/commands/get_info"); httpPost.setHeader("Content-Type", "text/xml"); String xml = "<in xmlns:xs=\"http://www.w3.org/2001/XMLSchema-instance\" xs:noNamespaceSchemaLocation=\"get_info.xsd\" />"; HttpEntity entity = new ByteArrayEntity(xml.getBytes("UTF-8")); httpPost.setEntity(entity); HttpResponse response = client.execute(httpPost); String uptimeResult = EntityUtils.toString(response.getEntity()); int isActiveResultCode = response.getStatusLine().getStatusCode(); System.out.println("Uptime rc " + isActiveResultCode); System.out.println("Uptime result " + uptimeResult); } private static void logout(CookieStore cookieStore, String host) throws IOException { CloseableHttpClient client = HttpClients.custom() .setDefaultCookieStore(cookieStore) .build(); HttpGet httpGet = new HttpGet(host + "/system/logout"); HttpResponse response = client.execute(httpGet); int isActiveResultCode = response.getStatusLine().getStatusCode(); System.out.println("Logout rc " + isActiveResultCode); } } |
...