Публикация данных веб-формы, когда имена случайны с indy

Я пытаюсь создать логин на https://umod.org/login, но мне трудно понять, как это работает. Почему я хочу создать логин? Их API-интерфейс сайта имеет ограничение в размере 40 для гостей и 100 для участников. В основном я хочу сохранить сеанс во время сеанса, пока я работаю с api.

Я понимаю, что мне нужно как-то войти в систему и получить cookie.

Я смотрел на некоторые должности, и я расстраиваюсь, потому что просто не могу заставить его работать. Я нашел такие вопросы: Зарегистрируйтесь на веб-сайте Delphi и Delphi - зайдите на веб-страницу с кода, который немного отличается от понимания.

Так что же я сделал? Я использовал элемент проверки, чтобы получить имена полей полей ввода на странице входа. В поле электронной почты есть идентификатор, называемый электронной почтой, но имя для обоих полей изменяется, как только я нажимаю обновление.

Я написал следующий код, но без успеха:

procedure Login(const aUsername, aPassword: string);
var
  http: TIdHTTP;
  ssl: TIdSSLIOHandlerSocketOpenSSL;
  params: TStringList;
begin
  http := TIdHTTP.Create(nil);
  try
    ssl := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
    try
      ssl.SSLOptions.SSLVersions := [sslvTLSv1, sslvTLSv1_1, sslvTLSv1_2];
      http.IOHandler := ssl;
      http.HandleRedirects := True;
      http.Request.UserAgent := 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:61.0) Gecko/20100101 Firefox/61.0';
      http.AllowCookies := True;

      http.Get('https://umod.org/login');

      params := TStringList.Create;
      try
        params.Add('email=' + aUsername);
        params.Add('password=' + aPassword);
        params.Add('remember=1');
        params.Add('redirect=https://umod.org/');

        http.Post('https://umod.org/login', params);
      finally
        params.Free;
      end;
    finally
      ssl.Free;
    end;
  finally
    http.Free;
  end;
end;

Я получаю следующую ошибку: EIdHTTPProtocolException: HTTP/1.1 419 unknown status

delphi,indy,indy10,delphi-10.2-tokyo,

0

Ответов: 1


2 принят

После того, как вы <form>HTML для страницы веб-формы, вам нужно проанализировать HTML, чтобы найти соответствующий <input>элемент и извлечь все его TStringListэлементы, которые вам нужно будет отправить обратно на сервер.

Этот синтаксический анализ даст вам фактические имена (в частности, случайно созданные) и не-пользовательские значения, которые необходимо ввести в ваш <input>.

Любой valueэлемент (особенно «скрытый»), имеющий valueатрибут не-empy (если он не предоставлен пользователем), ДОЛЖЕН быть отправлен.

Это именно то, что сделает веб-браузер, и это то, что ожидает от вас сервер. Инди не поможет вам в этом разборе, вам нужно самому справиться с этим. Существует множество парсеров HTML, если вы смотрите вокруг.

Дельфы, Инди, indy10, Дельфы-10,2-Токио,
Похожие вопросы