【问题标题】:How to handle TIdHTTPServer with TIdMultiPartFormDataStream如何使用 TIdMultiPartFormDataStream 处理 TIdHTTPServer
【发布时间】:2012-06-17 01:11:33
【问题描述】:

您好,我需要有关如何使用 indy 的 IdHttpServer 检索参数和数据的帮助。

我的许多应用程序使用 TIdMultiPartFormDataStream 通过 php.ini 发送数据。出于某种原因,我想使用 TIdHTTPServer 来验证参数并将请求转发到其目的地。

我创建了一个简短的示例供您查看。

uses
  IdContext, IdMultipartFormData;

// Server Side------------------------------------------------

IdHTTPServer1.Defaultport := 88;
IdHTTPServer1.active := True;

procedure TForm1.IdHTTPServer1CommandGet(AContext: TIdContext;
  ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
begin
  // the request will be pass through its destination by POST/GET
  // and send the result back to the client apps.
  AResponseInfo.ContentText := ARequestInfo.Params.Text;
end;

// Client Side------------------------------------------------
// This will work using the standard Post or Get
procedure TForm1.btnPost1Click(Sender: TObject);
var
  sl: TStringList;
  res: String;
begin
  sl := TStringList.Create;
  try
    sl.Add('Param1=Data1');
    sl.Add('Param2=Data1');
    sl.Add('Param3=Data2');
    sl.Add('Param4=Data3');
    res := IdHTTP1.Post('http://localhost:88/some.php', sl);
    ShowMessage(res);
  finally
    sl.Free;
  end;
end;

//how can i get the parameters and value for this code in my IdHttpServer
procedure TForm1.btnPost2Click(Sender: TObject);
var
  mfd: TIdMultiPartFormDataStream;
  res: String;
begin
  mfd := TIdMultiPartFormDataStream.Create;
  try
    mfd.AddFormField('Param1', 'Data1');
    mfd.AddFormField('Param2', 'Data1');
    mfd.AddFormField('Param3', 'Data2');
    mfd.AddFormField('Param4', 'Data3');
    res := IdHTTP1.Post('http://localhost:88/some.php', mfd);
    ShowMessage(res);
  finally
    mfd.Free;
  end;
end;

我如何知道客户端应用程序是否传递 TIdMultiPartFormDataStream 类型的参数?

【问题讨论】:

    标签: delphi indy indy10 simplehttpserver


    【解决方案1】:

    这个问题之前在EmbarcaderoIndy 论坛上已经被问过很多次了。请搜索他们的档案以及其他档案,例如Google Groups,以查找代码示例。

    简而言之,当触发TIdHTTPServer.OnCommandGet 事件时,如果AResponseInfo.ContentType 属性显示multipart/form-data(您使用的TIdHTTP.Post() 版本将发送application/x-www-form-urlencoded),AResponseInfo.PostStream 属性将包含客户端发布的原始 MIME 数据。您可以使用TIdMessageDecoderMIME 类对其进行解析。但是,该类从未打算在服务器端使用,因此使用起来不是很直观,但还是可以的。

    在 Indy 11 中,我计划将原生 multipart/form-data 直接解析为 TIdHTTPServer 本身,但目前还没有 ETA,因为我们还没有开始在 Indy 11 上工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-10
      • 1970-01-01
      相关资源
      最近更新 更多