2008-11-19 11 views

Odpowiedz

43

Korzystanie z indeksu. Umieść swoje parametry w StringList (name = value) i po prostu wywołaj Post z URL i 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; 
+0

Obsługa TIdHTTP również https? – Ampere

+1

Tak, TIdHTTP obsługuje HTTPS. http://stackoverflow.com/a/6693653/19183 –

+0

Czy parametry z 'lParamList' są takie same jak nieparametrowe parametry żądania do serwera http delphi (próbuję wysłać żądanie postu do już utworzonego serwera http delphi) –

8

Jeszcze raz, Synapse TCP/IP library na ratunek. Użyj procedury HTTPSEND HTTPPostURL.

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

Twój adres URL będzie zasób odpowiedzieć Również w tym URLDATA byłyby dane formularzy, a wyniki XML wróci jako strumień w DANYCH.

+1

Synapse to zdecydowanie kolejna realna opcja. –

14

Oto przykład użycia Indy, żeby móc dodawać JPEG do serwera WWW z systemem Gallery

Mam kilka przykładów tego typu rzeczy (ja używam ich w wygaszacz ekranu napisałem w Delphi dla projektu Galerii dostępnych here lub więcej informacji na stronie internetowej galerii here).

Uważam, że ważnym bitem jest to, że JPEG jest przekazywany jako strumień.

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; 
Powiązane problemy