gpt4 book ai didi

delphi - 如何使用 TIdMultiPartFormDataStream 处理 TIdHTTPServer

转载 作者:行者123 更新时间:2023-12-03 15:30:59 26 4
gpt4 key购买 nike

您好,我需要有关如何使用 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 类型的参数?

最佳答案

这个问题已经在 Embarcadero 中被多次询问和回答过。和Indy论坛。请搜索他们的文件以及其他文件,例如 Google Groups ,查找代码示例。

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

在 Indy 11 中,我计划将 native multipart/form-data 直接解析到 TIdHTTPServer 本身,但目前还没有预计时间,因为我们还没有确定尚未开始 Indy 11 的开发工作。

关于delphi - 如何使用 TIdMultiPartFormDataStream 处理 TIdHTTPServer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11025703/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com