delphi – 枚举TWebRequest HTTP头字段
发布时间:2020-12-15 10:04:14 所属栏目:大数据 来源:网络整理
导读:是否可以转储TWebRequest(和TWebResponse)对象的所有头字段? 目前我使用GetFieldByName()并使用Writeln()打印它们,但这只有在我已经知道标题字段的名称时才有效.我正在寻找一种方法来获取所有标题字段名称来创建每个字段,但我没有找到任何方法来做到这一点.
是否可以转储TWebRequest(和TWebResponse)对象的所有头字段?
目前我使用GetFieldByName()并使用Writeln()打印它们,但这只有在我已经知道标题字段的名称时才有效.我正在寻找一种方法来获取所有标题字段名称来创建每个字段,但我没有找到任何方法来做到这一点. 我编写了一个REST datasnap控制台应用程序,并希望将所有HTTP请求/响应记录到控制台. 解决方法
AFAIK它是不可能的(Delphi XE2).
我使用了一点trink来访问原始标题. 实际的类请求类是TIdHTTPAppRequest(警告:对于不同类型的webbroker应用程序可能有所不同.我没有使用不同类型的datasnap应用程序测试此代码). 所以诀窍是: 声明类似于以下的类助手: TIdHTTPAppRequestHelper = class helper for TIdHTTPAppRequest public function GetRequestInfo: TIdEntityHeaderInfo; end; implementation function TIdHTTPAppRequestHelper.GetRequestInfo: TIdEntityHeaderInfo; begin Result := FRequestInfo; end; 通过这种方式,您可以使用此帮助程序来访问受保护的FRequestInfo字段. 在OnAction事件处理程序中,您可以使用以下代码来获取所有标头名称: 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不允许读取原始标头是很糟糕的.那应该改变! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |