2008-11-19 7 views

Trả lời

43

Sử dụng Indy. Đặt các tham số của bạn trong một StringList (name = value) và chỉ cần gọi Post với URL và 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

Hỗ trợ TIdHTTP cũng https? – Ampere

+1

Có, TIdHTTP hỗ trợ HTTPS. http://stackoverflow.com/a/6693653/19183 –

+0

Các tham số từ 'lParamList' có giống như các tham số chưa được phân tích của một yêu cầu đến máy chủ http delphi hay không (Tôi đang cố gửi một yêu cầu gửi tới máy chủ http delphi đã tạo) –

8

Một lần nữa, Synapse TCP/IP library để giải cứu. Sử dụng thói quen HTTPSEND HTTPPostURL.

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

URL của bạn cũng sẽ là tài nguyên để đăng, URLDATA sẽ là dữ liệu biểu mẫu và kết quả XML của bạn sẽ trở lại dưới dạng luồng trong DATA.

+1

Synapse chắc chắn là một lựa chọn khả thi khác. –

14

Dưới đây là một ví dụ của việc sử dụng Indy để Đăng JPEG đến một máy chủ web chạy Gallery

Tôi đã có nhiều ví dụ về các loại công cụ này (tôi sử dụng chúng trong một bảo vệ màn hình tôi đã viết trong Delphi cho dự án Thư viện có sẵn here hoặc thông tin khác trên trang web của Thư viện here).

Bit quan trọng tôi giả sử là JPEG được truyền dưới dạng luồng.

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;