2011-12-29 13 views
5

czy można zrzucić wszystkie pola nagłówka obiektu TWebRequest (i TWebResponse)? W tej chwili używam GetFieldByName() i wydrukuję je za pomocą Writeln(), ale działa to tylko wtedy, gdy znam już nazwę pola nagłówka. Szukam sposobu na uzyskanie wszystkich nazw pól nagłówkowych, aby wyliczyć każde pole, ale nie znalazłem żadnej metody, aby to zrobić.Wyliczenie pól nagłówka HTTP TWebRequest

Napisałem aplikację konsolową REST Datasnap i chcę logować wszystkie żądania/odpowiedzi HTTP do konsoli.

Odpowiedz

4

AFAIK to nie jest możliwe (Delphi XE2).

Użyłem małego trink, aby uzyskać dostęp do surowych nagłówków. To jest naprawdę brudne! Używaj na własne ryzyko!

Właściwą klasą klas jest TIdHTTPAppRequest (OSTRZEŻENIE: Może być różny dla różnych typów aplikacji webbrokera .Nie przetestowałem tego kodu z różnymi rodzajami aplikacji datasnap).

Dlatego sztuką jest:

Zadeklaruj klasy pomocnika podobny do następującego:

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

    implementation 

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

W ten sposób można korzystać z tej pomocnika mieć acccess do pola FRequestInfo chronionej.

W obsługi zdarzeń OnAction można wykorzystać poniższy kod, żeby mieć wszystkie nazwy nagłówków:

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; 

Jednak jest to złe, że TWebRequest nie pozwala odczytać surowych nagłówków. To powinno zostać zmienione!

+0

To mi się udało: dziękuję :) – MBulli

Powiązane problemy