Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
 RTC: элементарный HTTP клиент  [new]
SOFT FOR YOU
Member

Откуда:
Сообщений: 3155
Делаю по этому примеру: http://www.realthinclient.com/classroom/

Делаю обычный запрос в браузере
OnCheckRequest приходит
В OnDataReceived Complete возвращает False
Если не анализировать Complete - в любом случае сервак ничего не отвечает

Что нужно поправить?

program RealThinClient;

{$APPTYPE CONSOLE}

uses
  System.SysUtils,
  rtcTypes,
  rtcSystem,
  rtcInfo,
  rtcConn,
  rtcDataSrv,
  rtcHttpSrv;

type
  THttpServer = class(TRtcHttpServer)
  protected
    procedure DoCheckRequest(Sender: TRtcConnection);
    procedure DoReceived(Sender: TRtcConnection);
  end;

procedure THttpServer.DoCheckRequest(Sender: TRtcConnection);
begin
  Sender.Accept;
end;

procedure THttpServer.DoReceived(Sender: TRtcConnection);
begin
  if (Request.Complete) then
  begin
    Response.ContentType := 'text/plain';
    Write('OK');
  end;
end;


var
  HttpServer: THttpServer;
  DataProvider: TRtcDataProvider;

begin
  HttpServer := THttpServer.Create(nil);
  try
    DataProvider := TRtcDataProvider.Create(HttpServer);
    DataProvider.Server := HttpServer;
    DataProvider.OnCheckRequest := HttpServer.DoCheckRequest;
    DataProvider.OnDataReceived := HttpServer.DoReceived;

    HttpServer.ServerAddr := 'localhost';
    HttpServer.ServerPort := '1234';
    HttpServer.ServerIPV := rtc_IPVDefault;
    HttpServer.MultiThreaded := True;

    HttpServer.Listen;

    while (True) do
    begin
      Sleep(1000);
    end;

  finally
    HttpServer.Free;
  end;

end.
16 фев 21, 16:39    [22281715]     Ответить | Цитировать Сообщить модератору
 Re: RTC: элементарный HTTP клиент  [new]
defecator
Member

Откуда:
Сообщений: 39691
SOFT FOR YOU,

давай начнём с азов - что ты хочешь получить в итоге, зачем тебе тут THttpServer

Ты же спрашиваешь про HttpClient, а не HttpServer

И по ссылке у тебя - "RTC HTTP Server in 199 lines of code"
а в заголовке - "элементарный HTTP клиент"

Сообщение было отредактировано: 16 фев 21, 17:41
16 фев 21, 17:47    [22281775]     Ответить | Цитировать Сообщить модератору
 Re: RTC: элементарный HTTP клиент  [new]
defecator
Member

Откуда:
Сообщений: 39691
чтобы сделать элементарный Http клиент, достаточно создать инстанс TRtcHttpClient
16 фев 21, 17:50    [22281779]     Ответить | Цитировать Сообщить модератору
 Re: RTC: элементарный HTTP клиент  [new]
Cobalt747
Member

Откуда:
Сообщений: 2282
SOFT FOR YOU,

попробуй добавить обработчик OnRequestNotAccepted
может там что увидишь
16 фев 21, 17:52    [22281781]     Ответить | Цитировать Сообщить модератору
 Re: RTC: элементарный HTTP клиент  [new]
SOFT FOR YOU
Member

Откуда:
Сообщений: 3155
Опечатался
сорян
сервер
16 фев 21, 17:52    [22281783]     Ответить | Цитировать Сообщить модератору
 Re: RTC: элементарный HTTP клиент  [new]
SOFT FOR YOU
Member

Откуда:
Сообщений: 3155
Cobalt747,

Так я же вручную Accept вызываю
16 фев 21, 17:54    [22281785]     Ответить | Цитировать Сообщить модератору
 Re: RTC: элементарный HTTP клиент  [new]
vkorshun
Member

Откуда:
Сообщений: 61
А где with TRtcDataServer(Sender) do ?
16 фев 21, 18:13    [22281802]     Ответить | Цитировать Сообщить модератору
 Re: RTC: элементарный HTTP клиент  [new]
defecator
Member

Откуда:
Сообщений: 39691
procedure THttpServer.DoReceived(Sender: TRtcConnection);
begin
  if (Request.Complete) then
  begin
    Response.ContentType := 'text/plain';
    Write('OK');
  end;
end;


Request откуда ты взял тут ?
16 фев 21, 18:16    [22281803]     Ответить | Цитировать Сообщить модератору
 Re: RTC: элементарный HTTP клиент  [new]
SOFT FOR YOU
Member

Откуда:
Сообщений: 3155
vkorshun,

TRtcHttpServer = class(TRtcDataServer)
THttpServer = class(TRtcHttpServer)
16 фев 21, 18:16    [22281804]     Ответить | Цитировать Сообщить модератору
 Re: RTC: элементарный HTTP клиент  [new]
defecator
Member

Откуда:
Сообщений: 39691
SOFT FOR YOU,

сделай для начала по примеру
SOFT FOR YOU
Делаю по этому примеру: http://www.realthinclient.com/classroom/
16 фев 21, 18:21    [22281805]     Ответить | Цитировать Сообщить модератору
 Re: RTC: элементарный HTTP клиент  [new]
SOFT FOR YOU
Member

Откуда:
Сообщений: 3155
defecator,

Реквест это свойство сервера
Ты точно на RTC программируешь?
16 фев 21, 18:33    [22281813]     Ответить | Цитировать Сообщить модератору
 Re: RTC: элементарный HTTP клиент  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 12572
SOFT FOR YOU
Реквест это свойство сервера
Внезапно: слушающий сокет и клиентский сокет - это два разных сокета
SOFT FOR YOU
Ты точно на RTC программируешь?
Ты точно понимаешь, что ты пишешь? Или программирование методом научного тыка?
16 фев 21, 18:36    [22281818]     Ответить | Цитировать Сообщить модератору
 Re: RTC: элементарный HTTP клиент  [new]
SOFT FOR YOU
Member

Откуда:
Сообщений: 3155
vkorshun,

Жесть
Большое спасибо :)
16 фев 21, 19:00    [22281838]     Ответить | Цитировать Сообщить модератору
 Re: RTC: элементарный HTTP клиент  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 62406
vkorshun
Не поняли Вы меня.

procedure THttpServer.DoCheckRequest(Sender: TRtcConnection);
begin
  Sender.Accept;
end;

procedure THttpServer.DoReceived(Sender: TRtcConnection);
begin
  if (Sender.Request.Complete) then
  begin
    Sender.Response.ContentType := 'text/plain';
    Sender.Write('OK');
  end;
end;
Так работает
17 фев 21, 10:38    [22282077]     Ответить | Цитировать Сообщить модератору
 Re: RTC: элементарный HTTP клиент  [new]
SOFT FOR YOU
Member

Откуда:
Сообщений: 3155
И снова здравствуйте

При запросе на сервер передаётся application/json
Вопрос, как из TRtcRequest получить передаваемый JSON?
Свойство DataSize возвращает правильное значение. Как получить сами данные - пока не ясно
23 фев 21, 18:23    [22285267]     Ответить | Цитировать Сообщить модератору
 Re: RTC: элементарный HTTP клиент  [new]
SOFT FOR YOU
Member

Откуда:
Сообщений: 3155
Нашёл
Sender.Read
:)
24 фев 21, 00:03    [22285409]     Ответить | Цитировать Сообщить модератору
Все форумы / Delphi Ответить