web-dev-qa-db-ja.com

Delphiを使用してHttp POST urlを呼び出す最も簡単な方法は何ですか?

質問に触発されました Delphiを使用してHttp GET urlを呼び出す最も簡単な方法は何ですか? POSTの使用方法のサンプルを見たいです。呼び出しからXMLを受信することが望ましい。

追加:投稿データに画像やその他のファイルを含めることはどうですか?

33
Tom

Indyを使用します。パラメーターをStringList(name = value)に入れ、URLとStringListを使用してPostを呼び出すだけです。

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;
44
Bruce McGee

Indyを使用して、実行中のWebサーバーにJPEGを投稿する例 Gallery

私はこの種のもののより多くの例を持っています(ギャラリープロジェクトのためにDelphiで書いたスクリーンセーバーで使用できます here 、または詳細ギャラリーのウェブサイト here )。

私が思う重要なビットは、JPEGがストリームとして渡されることです。

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;
15
Conor Boyd

繰り返しますが、 Synapse TCP/IP library が助けになります。 HTTPSENDルーチン HTTPPostURL を使用します。

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

あなたのURLも投稿するリソースであり、URLDATAはフォームデータであり、XML結果はDATAのストリームとして返されます。

8
skamradt