Http Post avec indy
J'ai un simple script php sur mon serveur web qui j'ai besoin de télécharger un fichier à l'aide de HTTP POST, ce que je fais en Delphi.
Voici mon code avec Indy mais aparantely il ne fonctionne pas et je ne peux pas comprendre ce que je ne fais pas correctement. Comment puis-je voir ce que j'ai envoyer sur le serveur est-il d'un tel outil ?
procedure TForm1.btn1Click(Sender: TObject);
var
fname : string;
MS,dump : TMemoryStream;
http : TIdHTTP;
const
CRLF = #13#10;
begin
if PromptForFileName(fname,'','','','',false) then
begin
MS := TMemoryStream.Create();
MS.LoadFromFile(fname);
dump := TMemoryStream.Create();
http := TIdHTTP.Create();
http.Request.ContentType:='multipart/form-data;boundary =-----------------------------7cf87224d2020a';
fname := CRLF + '-----------------------------7cf87224d2020a' + CRLF + 'Content-Disposition: form-data; name=\"uploadedfile\";filename=\"test.png"' + CRLF;
dump.Write(fname[1],Length(fname));
dump.Write(MS.Memory^,MS.Size);
fname := CRLF + '-----------------------------7cf87224d2020a--' + CRLF;
dump.Write(fname[1],Length(fname));
ShowMessage(IntToStr(dump.Size));
MS.Clear;
try
http.Request.Method := 'POST';
http.Post('http://posttestserver.com/post.php',dump,MS);
ShowMessage(PAnsiChar(MS.Memory));
ShowMessage(IntToStr(http.ResponseCode));
except
ShowMessage('Could not bind socket');
end;
end;
end;
source d'informationauteur opc0de
Vous devez vous connecter pour publier un commentaire.
Indy a
TIdMultipartFormDataStream
à cet effet:L'appel d'une PHP à partir d'Indy peut échouer en raison de l'User-Agent, alors vous obtenez une erreur 403.
Essayer de cette façon, il fixe pour moi:
Vous avez perdu 2 caractères '--'. Il est préférable de le faire: