@Alex_kuznec
IT специалист

Keep Alive и Session ID в Postman — реально ли?

Добрый день, коллеги профессионалы.
Помогите пожалуйста опытом, может кто сталкивался?

Моя задача заключается в том, чтобы просто проверить набор API- команд (т.к. адекватной и актуальной документации нет, а надо точно знать какой f-back от сервера).

Чтобы начать работать с сервером, необходимо ему послать команду GET по такому адресу http://IP-адрес/rest/n , в ответ он вернет Session ID, который действителен в течение 30 сек.
Т.е. это создание сессии.

После чего мне надо послать одну из API команд, но по такому адресу http://IP-адрес/rest/r/{Session ID, полученный из первой команды}

Как это сделать в Postman и реально ли? Я разобрался как посылать команды пакетом (друг за другом), но как из фидбэка от предыдущей команды, передать данные в URL- заголовок следующей и реально ли это сделать в Postman - не пойму!? Через какие-то глобальные переменные, что-то тоже ничего не получается.

Может есть другое ПО, способное делать это?

Заранее спасибо за ответ,
Алексей (не программист я)
  • Вопрос задан
  • 1637 просмотров
Решения вопроса 1
@Alex_kuznec Автор вопроса
IT специалист
Видимо отвечу сам на свой вопрос.
Но жаль, что ПО платное: https://www.soapui.org/functional-testing/properti...
Может кто-то еще порекомендует, что-то аналогичное, бесплатное?

12 Окт. 2016
Что же, видимо отвечу и на этот вопрос тоже сам.
Ничего бесплатного и удобного для решения моей задачи я так и не нашел, поэтому пришлось написать свою утилиту. Ниже привожу код - вдруг, кому-нибудь пригодится в будущем!
Утилита читает JSON структуру из текстового файла (который можно править на лету и сохранять) и отправляет на сервер, по нажатию клавиши Enter.
Касательно "говнокодов", "оторванных рук", "велосипедов" и т.п. и т.д. - как я и писал, не супер программист и не претендую! Утилита позволяет решить мне мой вопрос и на этом алилуя.
Если когда-нибудь, какой-нибудь Java-гуру посетит эту страницу и скажет, что надо все переписать (а главное сделает это) - буду ему только благодарен, как и другие пользователи этого ресурса.

import java.net.*;
import java.net.URL;
import java.net.HttpURLConnection;
import java.io.*;
import java.io.Console;
import java.util.*;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import org.apache.commons.codec.binary.Base64;
// Последнюю библиотеку можно взять тут commons.apache.org/proper/commons-codec Она нужна для создания строки аутентификации.

public class rt2{

// fname - файл из которого будет браться JSON структура, sid - ID сессии, полученный от сервера
// json_str - прочитанная JSON структура, s - строка для чтения ввода с клавиатуры
static public String fname="json.txt", sid = "", json_str="", s;

//Метод чтение файла c JSON структурой
public static void m_readfile (String filename) throws IOException{
int i = 0;
char a;
boolean endof = false;
System.out.println ("Open file:" + filename + "\n" +"Current SID:" + rt2.sid +"\n");
StringBuilder s = new StringBuilder();
FileReader Fr = new FileReader (filename);
do {
i = Fr.read ();
if (i==(-1)) break;
s.append((char) i);

} while (i!=-1);
rt2.json_str = s.toString();
Fr.close ();
i = s.length ();
System.out.println ("Message lenght:"+ i +"\n");

}
// r_type: POST или GET; r_URL -полный URL "192.168.1.1/rest/n", r_login - логин, r_pwd - пароль
// ses_id - ID сесии, если равно "", то необходимо создание новой сесии, если не равно, то Keep Alive запрос или API запрос
// json_structure - отправляемая JSON структура
public static void send_request (String r_type, String r_url, String r_login, String r_pwd, String ses_id, String json_structure) {
String req = "";

//Формирование строки для базовой аутентификации
String authString = r_login + ":" + r_pwd;
byte[] authEncBytes = Base64.encodeBase64(authString.getBytes());
String authStringEnc = new String(authEncBytes);
try{
// Формирование HTTP запроса, открытие сессии и отправка сообщения
URL url= new URL(r_url);
HttpURLConnection uc = (HttpURLConnection) url.openConnection();
uc.setDoOutput(true);
uc.setDoInput(true);
uc.setRequestMethod (r_type);
uc.setRequestProperty ("authorization", "Basic " + authStringEnc);
uc.setUseCaches(false);
uc.setRequestProperty("content-type","application/json");
if (json_structure !="") {
uc.setRequestProperty("content-lenght", ""+json_structure.length());
}else {
uc.setRequestProperty("content-lenght", ""+req.length());
}
uc.connect();
DataOutputStream dos= new DataOutputStream(uc.getOutputStream());
dos.writeBytes(json_structure);
dos.flush();
dos.close();
System.out.println("\n"+"--==JSON BODY SENT ==--"+"\n\n"+json_structure+"\n\n"+"--==JSON BODY SENT ==--"+"\n");
BufferedReader br = new BufferedReader (new InputStreamReader(uc.getInputStream()));

String res = null;

if (ses_id == "") {
// Если ID сесии пуст, то это означает, что поступил первый запрос на создание сесии.
// В противном случае он уже существует и это или Keep-Alive запрос или API запрос.

// Чтение ответа от сервера и создание строки, для последующего парсинга - надо выделить Session ID из ответа.
while ((res=br.readLine()) != null)
{rt2.sid = rt2.sid + res;}
br.close();
uc.disconnect();

//Парсинг ответа от сервера. Выделение ID сессии. В моем случае, ответ от сервера одинаков и я точно знаю, что это 3е слово, после символа " .
String[] sid_to_use = rt2.sid.split("\"");
rt2.sid = sid_to_use [3];
} else {

System.out.println("\n"+"--==SERVER RESPONSE START==--"+"\n");
while ((res=br.readLine()) != null)
{System.err.println(res);}
System.out.println("\n"+"--==SERVER RESPONSE END==--"+"\n");
br.close();
uc.disconnect();
}
} catch (MalformedURLException me) {
System.err.println(me);
} catch (UnknownHostException he){
System.err.println(he);
} catch (UnknownServiceException se){
System.err.println(se);
} catch (IOException ioe) {
System.err.println(ioe);
}}

public static void main (String[] args){

rt2 rt = new rt2 ();
rt2.send_request("POST","192.168.1.1/rest/n","admin","admin",rt2.sid,""); // Превый запрос к серверу и получение ID сесии

Timer timer = new Timer(true); // Создание демон- процесса, который будет отправлять Keep-Alive каждые 28 сек
TimerTask task = new TimerTask () {
String res2 = null;
public void run() {
LocalDateTime time = LocalDateTime.now();

rt2.send_request("GET","192.168.1.1/rest/poll"+rt2.sid,"admin","admin",rt2.sid,"");

System.out.println ("-=Keep Alive sent=-" + " Time:"+ time.format(DateTimeFormatter.ofPattern("HH:mm:ss"))+" SID: "+rt2.sid+"\n");
System.out.println( "Press ENTER to send JSON request ('q'+Enter to exit): ");

};};
timer.schedule (task,0,28000);

do {
s = System.console().readLine();
if (s.equals("q")) break;
try{
m_readfile(fname);
rt2.send_request("POST","192.168.1.1/rest/req"+rt2.sid,"admin","admin",rt2.sid,rt2.json_str);
} catch (IOException e) {
System.err.println(e);
} }
while (true);
}
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы