gpt4 book ai didi

delphi - 枚举 TWebRequest HTTP header 字段

转载 作者:行者123 更新时间:2023-12-03 14:58:56 25 4
gpt4 key购买 nike

是否可以转储 TWebRequest(和 TWebResponse)对象的所有 header 字段?目前,我使用 GetFieldByName() 并使用 Writeln() 打印它们,但这仅在我已经知道标题字段的名称时才有效。我正在寻找一种方法来获取所有 header 字段名称以枚举每个字段,但我没有找到任何方法来做到这一点。

我编写了一个 REST datasnap 控制台应用程序,并希望将所有 HTTP 请求/响应记录到控制台。

最佳答案

据我所知这是不可能的(Delphi XE2)。

我使用了一些技巧来访问原始 header 。然而,这实在是太脏了!使用风险自负!

实际的类请求类是 TIdHTTPAppRequest(警告:不同类型的网络经纪应用程序可能有所不同。我尚未使用不同类型的 datasnap 应用程序测试此代码)。

所以诀窍是:

声明一个类似于以下内容的类助手:

  TIdHTTPAppRequestHelper = class helper for TIdHTTPAppRequest
public
function GetRequestInfo: TIdEntityHeaderInfo;
end;

implementation

function TIdHTTPAppRequestHelper.GetRequestInfo: TIdEntityHeaderInfo;
begin
Result := FRequestInfo;
end;

通过这种方式,您可以使用此帮助程序来访问 protected FRequestInfo 字段。

在 OnAction 事件处理程序中,您可以使用以下代码来获取所有 header 名称:

procedure Twm.wmWebActionItem1Action(Sender: TObject; Request: TWebRequest;
Response: TWebResponse; var Handled: Boolean);
var
HeadersCount: Integer;
I: Integer;
sw: TStreamWriter;
begin
Response.ContentType := 'text/plain';
Response.ContentStream := TMemoryStream.Create;
sw := TStreamWriter.Create(Response.ContentStream);
try
HeadersCount := TIdHTTPAppRequest(Request).GetRequestInfo.RawHeaders.Count;
for I := 0 to HeadersCount - 1 do
sw.WriteLine(TIdHTTPAppRequest(Request).GetRequestInfo.RawHeaders.Names[I]);
finally
sw.Free;
end;
Handled := True;
end;

但是,TWebRequest 不允许读取原始 header 是很糟糕的。这应该改变!

关于delphi - 枚举 TWebRequest HTTP header 字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8666411/

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