Перейти к содержанию
Fire Monkey от А до Я
  • 0

Архивирование/компрессия данных запроса TRestRequest через GZip


notricky

Вопрос

Собственно есть способ получать и распаковывать данные, полученные в GZIP.

В качестве примера:

procedure TFMain.FormCreate(Sender: TObject);
begin
  (ReqGet.Client.HTTPClient.Peer.GetObject as TIdCustomHTTP).Compressor := 
     TIdCompressorZLib.Create(ReqGet.Client.HTTPClient.Peer.GetObject as TIdCustomHTTP);
  ReqGet.AcceptEncoding := 'gzip,deflate';
...
end;

А вот как их отправить (как запаковать - механизм? и куда подставить строку) - не понятно.

Отправка интересует и POST и GET

Прошу помощи.

Ссылка на комментарий

Рекомендуемые сообщения

  • 0
  • Модераторы
1 час назад, notricky сказал:

Собственно есть способ получать и распаковывать данные, полученные в GZIP.

В качестве примера:


procedure TFMain.FormCreate(Sender: TObject);
begin
  (ReqGet.Client.HTTPClient.Peer.GetObject as TIdCustomHTTP).Compressor := 
     TIdCompressorZLib.Create(ReqGet.Client.HTTPClient.Peer.GetObject as TIdCustomHTTP);
  ReqGet.AcceptEncoding := 'gzip,deflate';
...
end;

А вот как их отправить (как запаковать - механизм? и куда подставить строку) - не понятно.

Отправка интересует и POST и GET

Прошу помощи.

что за код такой??

если хотите отправить и получить сжатые данные, то используйте System.ZLib (если не ошибаюсь)

если использовать Indy (не рекомендую), то там есть специальный компонент TIdCompressorZLib

Ссылка на комментарий
  • 0

Речь про TRestRequest.

Код - чтобы подключить декомпрессию в "авторежиме" (можно еще мануально декомпрессить RawBytes)

А вот как делать компрессию и отправлять в GZIP-е - в этом состоит вопрос.

Ссылка на комментарий
  • 0
  • Модераторы
Только что, notricky сказал:

Речь про TRestRequest.

Код - чтобы подключить декомпрессию в "авторежиме" (можно еще мануально декомпрессить RawBytes)

А вот как делать компрессию и отправлять в GZIP-е - в этом состоит вопрос.

ответ дан выше, посмотрите внимательно

Ссылка на комментарий
  • 0

TRestRequets содержит внутренний компонент IdHttp, который, имея, property Compressor умеет декомпрессировать сжатые данные автоматически. Но доступ к нему извне не дан, потому код для того, чтобы получить к нему доступ.

Ссылка на комментарий
  • 0
8 минут назад, ZuBy сказал:

ответ дан выше, посмотрите внимательно

Я посмотрел. Ответ не дан.

Конкретный код не гуглится по теме compresson - Только по теме decompression

Ссылка на комментарий
  • 0
  • Модераторы
5 минут назад, notricky сказал:

TRestRequets содержит внутренний компонент IdHttp, который, имея, property Compressor умеет декомпрессировать сжатые данные автоматически. Но доступ к нему извне не дан, потому код для того, чтобы получить к нему доступ.

такс, давайте сначала.

1) Делфи какая стоит?

2) это родной TRestRequest?

3) там нет idHTTP!

4) компрессор/декомпрессор делается через модуль System.Zlib 

 

Ссылка на комментарий
  • 0

Вопрос именно в том как, а не что  использовать для компрессии.

Допустим есть строка, которую нужно сжать и подставить ее... куда? в значение параметра? А если GET?

Ссылка на комментарий
  • 0

1. В тегах указана версия Дельфи. XE7

2. Родной

3. тем не менее работает: ReqGet.Client.HTTPClient.Peer.GetObject as TIdCustomHTTP

4. Как на конкретном примере строки сделать компрессию и подставить полученное... куда? в какое место RestRequest?

Изменено пользователем notricky
Ссылка на комментарий
  • 0
  • Модераторы

незнаю, что и как в XE7 (она уже не жилец)

но если бы вы посмотрели что из себя представляет модуль System.Zlib, то было бы понятно

var
  zs: TZDecompressionStream;
  Mem: TMemoryStream;
begin
  Mem := TMemoryStream.Create;
  zs := TZDecompressionStream.Create(Mem);
ZDecompressStr()
ZCompressStr()

дальше наверное разберетесь, как это отправить в TRestRequest. т.к. в новых делфях не используется "внутри" TIdHTTP

Ссылка на комментарий
  • 0
45 минут назад, ZuBy сказал:

незнаю, что и как в XE7 (она уже не жилец)

но если бы вы посмотрели что из себя представляет модуль System.Zlib, то было бы понятно


var
  zs: TZDecompressionStream;
  Mem: TMemoryStream;
begin
  Mem := TMemoryStream.Create;
  zs := TZDecompressionStream.Create(Mem);

ZDecompressStr()
ZCompressStr()

дальше наверное разберетесь, как это отправить в TRestRequest. т.к. в новых делфях не используется "внутри" TIdHTTP

Ок, все это на поверхности, но кода на компрессию все так же нет.

А как в новых делфях осуществить отправку архивированного именно в GZIP методом GET?

Я вот не могу разобраться.

Интерес в том, что для декомпрессии в GZIP используется FZlib.DecompressGZipStream

Но вот аналогичного FZlib.СompressGZipStream - НЕТ! Это первое. Второе. Получу я RawData или String - дальше что делать? Подставлять как обычное значение параметра в Params.ParameterByName().value?

Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...