如何处理与TIdHTTPServer TIdMultiPartFormDataStream(How

2019-09-18 02:30发布

嗨,我需要了解如何使用检索从IdHttpServer印的参数和数据的帮助。

我的许多应用程序的使用TIdMultiPartFormDataStream超过PHP的发送数据。 我想用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类型?

Answer 1:

这已被要求,并在回答之前多次Embarcadero公司和印论坛。 请搜索通过他们的档案,以及其他档案,像谷歌网上论坛 ,找到代码示例。

简而言之,当TIdHTTPServer.OnCommandGet事件被触发,如果AResponseInfo.ContentType物业说multipart/form-data (该版本TIdHTTP.Post()使用的是将发送application/x-www-form-urlencoded代替) ,该AResponseInfo.PostStream属性将包含客户端发布的原始MIME数据。 您可以使用TIdMessageDecoderMIME类来分析它。 然而,该类从未打算使用的服务器端,所以它不是很直观的使用,但它是可能nontheless。

在印第安纳波利斯11,我就准备在实施原生multipart/form-data直接解析成TIdHTTPServer本身,但对没有ETA但因为我们还没有在印第安纳波利斯11开始工作呢。



文章来源: How to handle TIdHTTPServer with TIdMultiPartFormDataStream