Inspiré par la question Quelle est la façon la plus simple d'appeler l'URL Http GET en utilisant Delphi? J'aimerais vraiment voir un exemple de la façon d'utiliser POST. De préférence pour recevoir XML de l'appel.
Ajouté: Qu'en est-il de l'inclusion d'une image ou d'un autre fichier dans les données de publication?
Utilisation d'Indy. Mettez vos paramètres dans une StringList (nom = valeur) et appelez simplement Post avec l'URL et 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;
Voici un exemple d'utilisation d'Indy pour publier un JPEG sur un serveur Web exécutant Gallery
J'ai plus d'exemples de ce genre de choses (je les utilise dans un économiseur d'écran que j'ai écrit en Delphi pour le projet Gallery disponible ici , ou plus d'informations sur le site Web de la galerie ici =).
Le bit important, je suppose, est que le JPEG est transmis en tant que flux.
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;
Encore une fois, bibliothèque Synapse TCP/IP à la rescousse. Utilisez la routine HTTPSEND HTTPPostURL .
function HttpPostURL(const URL, URLData: string; const Data: TStream): Boolean;
Votre URL serait également la ressource à publier, les URLDATA seraient les données du formulaire et vos résultats XML reviendraient sous forme de flux dans DATA.