2012-10-19 11 views
10

मैं कुछ कोड को TWebBrowser से क्रोमियम में कनवर्ट करने का प्रयास कर रहा हूं लेकिन मुझे HTTP अनुरोध के साथ पोस्ट और हेडर डेटा भेजने का तरीका पता लग रहा है।मैं क्रोमियम के साथ पोस्ट और हेडर डेटा कैसे भेजूं?

नीचे TWebBrowser कार्यक्षमता है जिसे मैं कार्यान्वित करने की कोशिश कर रहा हूं।

var 
VHeader, PostData: OleVariant; 


PostData := VarArrayCreate([0, Length(XMLString) - 1], varByte) ;  
HeaderData := 'Content-Type: application/x-www-form-urlencoded'+ '\n'; 

WebBrowser1.Navigate(StrUrl,EmptyParam,EmptyParam,PostData,VHeader); 

मैं क्रोमियम के साथ समकक्ष कैसे करूं?

+0

इस सूत्र में नहीं है [ 'example'] (https://groups.google.com/forum/?fromgroups=#!topic/delphichromiumembedded/r1_ytEvBHEs) डेल्फी CEF आवरण द्वारा किए गए एक पोस्ट अनुरोध की खुद लेखक अगर मैं डेल्फी पहुंचूंगा और इसका परीक्षण करने के लिए एक जगह पाउंगा, तो मैं इसे एक उत्तर के रूप में पोस्ट करूंगा (यदि कोई तेज़ नहीं होगा :-) – TLama

+1

धन्यवाद, मैं इसे देख लूंगा। – Trevor

+0

तो मुझे यह काम मिल गया .. (आपके उदाहरण के साथ TLama) सभी शीर्षलेख डेटा जोड़ने के अलावा .. मेरा एप्लिकेशन इसके बिना ठीक चल रहा है (या यह पहले से ही डिफ़ॉल्ट रूप से सेट है) .. लेकिन अगर कोई जानता है कि इसे कैसे करना है हेडर डेटा, या अभी भी जवाब देना चाहता है मैं अभी भी दिलचस्पी लेता हूं .. उस लिंक को उत्तर के रूप में रखने के लिए स्वतंत्र महसूस करें और मैं इसे स्वीकार करूंगा .. धन्यवाद! – Trevor

उत्तर

9

डेल्फी क्रोमियम एंबेडेड के लिए अनुपलब्ध दस्तावेज के कारण, मैं सीईएफ के सी ++ संस्करण के लिए वेब अनुरोध भेजने के लिए आवश्यक आवश्यकताओं का उल्लेख करूंगा। इसलिए, आपको क्रोमियम में अनुरोध भेजने के लिए LoadRequest विधि का उपयोग करने की आवश्यकता है। इसका उपयोग करने के लिए, आपको और CefPostData ऑब्जेक्ट हेडर और डेटा विनिर्देश के लिए CefRequest अनुरोध ऑब्जेक्ट क्लास के ऑब्जेक्ट इंस्टेंस की आवश्यकता है।

uses 
    ceflib; 

function CreateField(const AValue: AnsiString): ICefPostDataElement; 
begin 
    Result := TCefPostDataElementRef.New; 
    Result.SetToBytes(Length(AValue), PAnsiChar(AValue)); 
end; 

procedure TForm1.Button1Click(Sender: TObject); 
var 
    Header: ICefStringMultimap; 
    Data: ICefPostData; 
    Request: ICefRequest; 
begin 
    Header := TCefStringMultimapOwn.Create; 
    Header.Append('Content-Type', 'application/x-www-form-urlencoded'); 

    Data := TCefPostDataRef.New; 
    Data.AddElement(CreateField('Data.id=27')); 
    Data.AddElement(CreateField('&Data.title=title')); 
    Data.AddElement(CreateField('&Data.body=body')); 

    Request := TCefRequestRef.New; 
    Request.Flags := WUR_FLAG_NONE; 
    Request.Assign('http://example.com/', 'POST', Data, Header); 

    Chromium1.Browser.MainFrame.LoadRequest(Request); 
end; 

ही उपरोक्त कोड का एक और संस्करण करना चाहिए:

this thread से हेनरी Gourvest के उदाहरण (डेल्फी CEF आवरण के लेखक) पर विस्तार, आप डेल्फी में निम्नलिखित छद्म कोड की तरह कुछ कोशिश कर सकते हैं :

procedure TForm1.Button1Click(Sender: TObject); 
var 
    Header: ICefStringMultimap; 
    Data: ICefPostData; 
    Request: ICefRequest; 
begin 
    Request := TCefRequestRef.New; 
    Request.Url := 'http://example.com/'; 
    Request.Method := 'POST'; 
    Request.Flags := WUR_FLAG_NONE; 

    Header := TCefStringMultimapOwn.Create; 
    Header.Append('Content-Type', 'application/x-www-form-urlencoded'); 
    Request.SetHeaderMap(Header); 

    Data := TCefPostDataRef.New; 
    Data.AddElement(CreateField('Data.id=27')); 
    Data.AddElement(CreateField('&Data.title=title')); 
    Data.AddElement(CreateField('&Data.body=body')); 
    Request.PostData := Data; 

    Chromium1.Browser.MainFrame.LoadRequest(Request); 
end; 
+0

ग्रेट उत्तर, धन्यवाद! – Trevor

+0

मदद करने के लिए खुशी ;-) – TLama

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