我正在尝试将一些代码从 TWebBrowser 转换为 Chromium,但无法弄清楚如何使用 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);
我如何用 Chromium 做同样的事情?
由于缺少 Delphi Chromium Embedded 的文档,我将参考发送 CEF C++ 版本的 Web 请求所需的要求。因此,您需要使用LoadRequest http://magpcss.org/ceforum/apidocs/projects/%28default%29/CefFrame.html#LoadRequest%28CefRefPtr%3CCefRequest%3E%29Chromium 中发送请求的方法。为了使用它,您需要该对象的实例CefRequest http://magpcss.org/ceforum/apidocs/projects/%28default%29/CefRequest.html请求对象类以及HeaderMap http://magpcss.org/ceforum/apidocs/projects/%28default%29/CefRequest..HeaderMap.html and CefPostData http://magpcss.org/ceforum/apidocs/projects/%28default%29/CefPostData.html请求标头和数据规范的对象。
扩展 Henri Gourvest(Delphi CEF 包装器的作者)的示例this thread https://groups.google.com/forum/?fromgroups=#!topic/delphichromiumembedded/r1_ytEvBHEs,你可以在 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;
上述代码的另一个版本也应该做同样的事情:
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;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)