Каков самый простой способ вызвать Http POST url с помощью Delphi?
Вдохновленный вопросом Какой самый простой способ вызвать Http GET url с помощью Delphi? Я действительно хотел бы увидеть пример использования POST. Предпочтительно принимать XML от вызова.
Добавлено: Как насчет включения изображения или другого файла в данные сообщения?
- Http Basic Authentication в Java с использованием HttpClient?
- Http proxy over ssh, а не носки
- Как работают Pause-загружаемые загрузки?
- Сравнение HTTP и FTP для передачи файлов
- htaccess перенаправляет для не-www как http, так и https
- Какой код ответа HTTP-статуса я должен использовать, если в запросе отсутствует требуемый параметр?
- Удалить http-референт
- Каков соответствующий ответ кода статуса HTTP для общего неуспешного запроса (а не ошибка)?
- HTTP и HTTPS iframe
- Что такое HTTP Entity?
- Access-Control-Allow-Origin Несколько доменов происхождения?
- Символ Cors Access-Control-Allow-Headers игнорируется?
- Возврат перенаправления в ответ на запрос XHR
Использование 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.