Tre*_*vor 10 delphi chromium delphi-xe
我试图将一些代码从TWebBrowser转换为Chromium,但我很难搞清楚如何使用HTTP请求发送post和header数据.
下面是我正在尝试实现的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);
Run Code Online (Sandbox Code Playgroud)
我如何使用Chromium进行等效操作?
由于缺少Delphi Chromium Embedded的文档,我将参考发送CEF C++版本的Web请求所需的要求.因此,您需要使用该LoadRequest
方法在Chromium中发送请求.要使用它,您需要CefRequest
请求对象类的对象实例以及请求标头和数据规范的HeaderMap
和CefPostData
对象.
扩展Henri Gourvest(Delphi CEF包装器的作者)示例this thread
,你可以在Delphi中尝试类似下面的伪代码:
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;
Run Code Online (Sandbox Code Playgroud)
同样应该做上面代码的另一个版本:
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;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
8136 次 |
最近记录: |