Каков самый простой способ вызвать Http POST url с помощью Delphi?

Вдохновленный вопросом Какой самый простой способ вызвать Http GET url с помощью Delphi? Я действительно хотел бы увидеть пример использования POST. Предпочтительно принимать XML от вызова.

Добавлено: Как насчет включения изображения или другого файла в данные сообщения?

Использование Indy. Поместите свои параметры в StringList (name = value) и просто вызовите Post с URL и StringList.

function PostExample: string; var lHTTP: TIdHTTP; lParamList: TStringList; begin lParamList := TStringList.Create; lParamList.Add('id=1'); lHTTP := TIdHTTP.Create; try Result := lHTTP.Post('http://blahblahblah...', lParamList); finally lHTTP.Free; lParamList.Free; end; end; 

Вот пример использования Indy для публикации JPEG на веб-сервере под управлением Gallery

У меня есть больше примеров такого рода вещей (я использую их в скринсейве, который я написал в Delphi для проекта Gallery, доступного здесь , или дополнительной информации об этом сайте галереи).

Важный бит, я полагаю, заключается в том, что JPEG передается как stream.

 procedure AddImage(const AlbumID: Integer; const Image: TStream; const ImageFilename, Caption, Description, Summary: String); var Response: String; HTTPClient: TidHTTP; ImageStream: TIdMultipartFormDataStream; begin HTTPClient := TidHTTP.Create; try ImageStream := TIdMultiPartFormDataStream.Create; try ImageStream.AddFormField('g2_form[cmd]', 'add-item'); ImageStream.AddFormField('g2_form[set_albumId]', Format('%d', [AlbumID])); ImageStream.AddFormField('g2_form[caption]', Caption); ImageStream.AddFormField('g2_form[force_filename]', ImageFilename); ImageStream.AddFormField('g2_form[extrafield.Summary]', Summary); ImageStream.AddFormField('g2_form[extrafield.Description]', Description); ImageStream.AddObject('g2_userfile', 'image/jpeg', Image, ImageFilename); Response := HTTPClient.Post('http://mygallery.com/main.php?g2_controller=remote:GalleryRemote', ImageStream); finally ImageStream.Free; end; finally HTTPClient.Free; end; end; 

Опять же, Synapse TCP / IP библиотека для спасения. Используйте HTTPSEND-процедуру HTTPPostURL .

 function HttpPostURL(const URL, URLData: string; const Data: TStream): Boolean; 

Ваш URL-адрес будет являться ресурсом для публикации, URLDATA будет представлять собой данные формы, и ваши результаты XML вернутся как stream в DATA.

  • Быстрая загрузка HTTP
  • Как загрузить несколько файлов с помощью одного HTTP-запроса?
  • Как $ HTTP Синхронный вызов с помощью AngularJS
  • Каковы подводные камни использования Websockets вместо RESTful HTTP?
  • Код состояния HTTP 0 - что это означает для выборки или XMLHttpRequest?
  • Nodejs POST запрос multipart / form-data
  • Как я могу программным образом удалить 2 ограничения соединения в WebClient
  • CORS с POSTMAN
  • Требуется ли номер порта в HTTP-заголовке «Host»?
  • Перекрестный ресурс совместного использования ресурсов с учетными данными
  • Отправить массив с HTTP Get
  • Давайте будем гением компьютера.