2011-12-29 21 views
5

यह एक TWebRequest (और TWebResponse) वस्तु के सभी शीर्ष लेख फ़ील्ड डंप करने के लिए संभव है? इस समय मैं GetFieldByName() का उपयोग करता हूं और उन्हें Wrriteln() से प्रिंट करता हूं लेकिन यह केवल तभी काम करता है जब मुझे पहले से ही हेडर फ़ील्ड का नाम पता हो। मैं प्रत्येक फ़ील्ड को गिनने के लिए सभी हेडर फ़ील्ड नाम प्राप्त करने का एक तरीका ढूंढ रहा हूं लेकिन मुझे ऐसा करने के लिए कोई विधि नहीं मिली।की गणना TWebRequest HTTP हेडर क्षेत्रों

मैं एक बाकी datasnap सांत्वना आवेदन में लिखा था और सभी HTTP अनुरोध/प्रतिक्रियाओं लॉग इन करने को सांत्वना करना चाहता है।

उत्तर

4

यह AFAIK संभव नहीं है (डेल्फी XE2)।

मैं एक छोटे से Trink का उपयोग किया है कच्चे हेडर के लिए उपयोग किया है। हालांकि, यह वास्तव में गंदा है! अपने जोखिम पर प्रयोग करें!

वास्तविक वर्ग अनुरोध वर्ग TIdHTTPAppRequest है (चेतावनी: विभिन्न प्रकार के वेब ब्रोकर ऐप के लिए अलग हो सकता है। मैंने इस कोड का विभिन्न प्रकार के डेटासैप ऐप के साथ परीक्षण नहीं किया है)।

तो चाल है:

एक वर्ग सहायक निम्न के समान घोषित:

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

    implementation 

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

इस तरह से आप की रक्षा FRequestInfo क्षेत्र के लिए acccess के लिए इस सहायक का उपयोग कर सकते हैं।

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 कच्चे हेडर को पढ़ने के लिए अनुमति देता है नहीं है। यह बदला जाना चाहिए!

+0

कि चाल किया धन्यवाद :) – MBulli

संबंधित मुद्दे