2012-10-19 15 views
10

いくつかのコードをTWebBrowserからChromiumに変換しようとしていますが、HTTPリクエストで投稿データとヘッダーデータを送信する方法がわかりません。Chromiumで投稿データとヘッダーデータを送信するにはどうすればよいですか?

以下は実装しようとしている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); 

どのようにChromiumと同等の機能を果たしますか?

+0

デルファイCEFラッパーによって作られたPOSTリクエストの[ 'example'(https://groups.google.com/forum/?fromgroups=#!topic/delphichromiumembedded/r1_ytEvBHEs)があります著者自身。私がDelphiにアクセスしてテストする場所を見つけたら、これを答えとして投稿します(誰かがもっと速くならない場合:-) – TLama

+1

ありがとう、私はそれを調べます。 – Trevor

+0

だから私はそれを働かせた。(あなたの例のTLamaで)ヘッダーデータを追加する以外はすべて..私のアプリケーションはそれがなくてもうまく動作するようだ(またはデフォルトで既に設定されている)。しかし誰かがヘッダーデータ、またはまだ私はまだ興味があると答えてほしい..答えとしてそのリンクを置くと私はそれを受け入れるよ..ありがとう! – Trevor

答えて

9

Delphi Chromium Embeddedのドキュメントが不足しているため、CEFのC++バージョンのWebリクエストを送信するための必要条件を紹介します。したがって、Chromiumでリクエストを送信するには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ラッパーの作者)に拡大

は、あなたがDelphiで次の擬似コードのようなものを試すことができますこのスレッドで

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

関連する問題