Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Использование SendStream в TSslHttpRest: примеры и ограничения

Delphi , Интернет и Сети , Интернет

 

Введение

В работе с HTTP-запросами в Delphi часто возникает необходимость отправки данных в теле запроса, особенно при взаимодействии с REST API. Компонент TSslHttpRest из библиотеки ICS предоставляет удобные средства для работы с HTTP-запросами, однако у него есть свои особенности, особенно при отправке JSON-массивов или бинарных данных.

В этой статье мы рассмотрим:
- Как правильно использовать SendStream в TSslHttpRest.
- Ограничения при работе с методами GET и DELETE.
- Альтернативные способы формирования тела запроса.


Отправка данных через SendStream

Классический способ отправки данных через THttpCli (из OverbyteIcsHttpPost1.pas) не подходит для TSslHttpRest. Вместо этого можно использовать свойство SendStream, которое позволяет передавать данные в виде потока.

Пример отправки JSON через SendStream

Допустим, у нас есть JSON-массив, который нужно отправить в теле POST-запроса:

procedure SendJsonArray;
var
  HttpRest: TSslHttpRest;
  JsonStream: TStringStream;
  JsonData: string;
begin
  HttpRest := TSslHttpRest.Create(nil);
  try
    JsonData := '[{"id": "0ab67665-49a7-4bd4-b111-8363b9ca07ba"},' +
                '{"id": "3d9ebfd5-249f-468e-bcc5-6d5cb93f9ff6"},' +
                '{"id": "a2b10f76-2218-41f2-b962-10f295c992d1"}]';

    JsonStream := TStringStream.Create(JsonData, TEncoding.UTF8);
    try
      HttpRest.SendStream := JsonStream;
      HttpRest.ContentTypePost := 'application/json';
      HttpRest.RestRequest('POST', 'https://api.example.com/items');
    finally
      JsonStream.Free;
    end;
  finally
    HttpRest.Free;
  end;
end;

Особенности работы с DELETE

Согласно RFC 9110, метод DELETE не должен содержать тело запроса, хотя некоторые API могут это поддерживать. Если сервер ожидает JSON в теле DELETE-запроса, можно использовать SendStream аналогично POST:

HttpRest.SendStream := JsonStream;
HttpRest.ContentTypePost := 'application/json';
HttpRest.RestRequest('DELETE', 'https://api.example.com/items');

Однако учтите, что промежуточные прокси или брандмауэры могут блокировать такие запросы.


Альтернативные способы отправки данных

1. Использование TRestParams

Компонент TRestParams позволяет формировать параметры запроса, но имеет ограничения при работе с JSON-массивами. В новых версиях ICS (начиная с SVN-обновления от 27.06.2025) добавлена поддержка массивов через свойство RParamFmt:

HttpRest.RestParams.RParamFmt := RPFmtArrayObj;
HttpRest.RestParams.AddItem('id', '0ab67665-49a7-4bd4-b111-8363b9ca07ba', RPTypeStr);
HttpRest.RestParams.AddItem('id', '3d9ebfd5-249f-468e-bcc5-6d5cb93f9ff6', RPTypeStr);
HttpRest.RestParams.RestRequest('DELETE', 'https://api.example.com/items');

2. Ручное формирование JSON

Если требуется сложная структура JSON, можно использовать библиотеки вроде SuperObject или формировать строку вручную:

var
  JsonStr: string;
begin
  JsonStr := '[{"id": "value1"}, {"id": "value2"}]';
  HttpRest.RawParams := JsonStr;
  HttpRest.RestRequest('POST', 'https://api.example.com/items');
end;

Заключение

  • Для отправки JSON в TSslHttpRest используйте SendStream или RawParams.
  • Методы GET и DELETE могут не поддерживать тело запроса на некоторых серверах.
  • В новых версиях ICS добавлена улучшенная поддержка JSON-массивов через TRestParams.RParamFmt.

Если ваш API требует нестандартного поведения, всегда проверяйте документацию сервера и тестируйте запросы вручную (например, через Postman).

Совет: Если нужно удалить множество элементов, лучше использовать POST с параметром action=delete, чтобы избежать проблем с ограничениями HTTP.

HttpRest.RestParams.AddItem('action', 'delete', RPTypeStr);
HttpRest.RestParams.AddItem('ids', 'id1,id2,id3', RPTypeStr);
HttpRest.RestRequest('POST', 'https://api.example.com/items');

Создано по материалам из источника по ссылке.

Статья описывает использование метода `SendStream` в компоненте `TSslHttpRest` для отправки данных в HTTP-запросах, включая примеры работы с JSON и ограничения методов GET и DELETE, а также предлагает альтернативные способы формирования запросов.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Интернет ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-08-29 02:59:48/0.011677026748657/0