• 🔥 Бесплатный курс от Академии Кодебай: «Анализ защищенности веб-приложений»

    🛡 Научитесь находить и использовать уязвимости веб-приложений.
    🧠 Изучите SQLi, XSS, CSRF, IDOR и другие типовые атаки на практике.
    🧪 Погрузитесь в реальные лаборатории и взломайте свой первый сайт!
    🚀 Подходит новичкам — никаких сложных предварительных знаний не требуется.

    Доступ открыт прямо сейчас Записаться бесплатно

Доопросить сервер

  • Автор темы Автор темы Shouldercannon
  • Дата начала Дата начала
S

Shouldercannon

Пришедший ответ помещаю в переменную типа string. Далее выполняю проверку на наличие \final\\queryid\ в пришедшем ответе
Код:
if not (Copy(qqq, Pos('\final\\queryid\', qqq), 16) = '\final\\queryid\') then // опросить повторно и опрашивать до тех пор пока в конце не будет \final\\queryid\
Как провести цикл проверки?
 
Пришедший ответ помещаю в переменную типа string. Далее выполняю проверку на наличие \final\\queryid\ в пришедшем ответе
Код:
if not (Copy(qqq, Pos('\final\\queryid\', qqq), 16) = '\final\\queryid\') then // опросить повторно и опрашивать до тех пор пока в конце не будет \final\\queryid\
Как провести цикл проверки?

Не вижу проблем...
За исключением:
1. Ответ сервера может не содержать '\final\\queryid\' НИКОГДА...
2. Сервер может не ответить вообще... ну допустим... если обиделся... :rolleyes:

я бы сделал так:
Код:
// функция опрашивающая сервер
function RequestToServer(out qPath: string): Boolean;
var
ans: string;
begin
Result := False;
qPath := '';
// ... спрашиваем у сервера. Если ответил - Result := True;

if Result then
qPath := ans;
end;
в коде программы
Код:
procedure TFormClient.Button2Click(Sender: TObject);
var
ResponseOK: Boolean;
AttemptsCount: Integer;
qqq: string;
Found : Boolean;
begin
Found := False;
AttemptsCount := 1000; // количество попыток спросить у сервера

ResponseOK := RequestToServer(qqq);
if ResponseOK then
Found := (Copy(qqq, Pos('\final\\queryid\', qqq), 16) = '\final\\queryid\');

while ResponseOK and not Found do
begin
Dec(AttemptsCount);
Application.ProcessMessages;
Sleep(100); // чуток подождали
ResponseOK := (AttemptsCount > 0) and RequestToServer(qqq);
if ResponseOK then
Found := (Copy(qqq, Pos('\final\\queryid\', qqq), 16) = '\final\\queryid\');
end;

if Found then
ShowMessage('Дожались!')
else
ShowMessage('Не дожались!')

end;
 
Мы в соцсетях:

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab