delphi - 使用 WebView/EdgeHTML 发送 POST 请求
问题描述
我目前正在尝试根据以下答案使 EdgeHTML/WebView 工作:Using WebView (EdgeHTML) in Delphi / C++ Builder
复制代码并运行它就可以了。
但是现在我正在尝试添加“NavigateWithHttpRequestMessage”过程,以便我可以发送 POST 请求并且必须意识到我不知道我应该如何为其参数创建对象。
它告诉我参数的类型是“HttpRequestMessage”。
我已经下载了 Windows 10 工具包,并在里面找到了 Windows.Web.Http.idl 和“HttpRequestMessage”的这个接口:
[exclusiveto(Windows.Web.Http.HttpRequestMessage)]
[uuid(F5762B3C-74D4-4811-B5DC-9F8B4E2F9ABF)]
interface IHttpRequestMessage : IInspectable
{
[propget] HRESULT Content([out] [retval] Windows.Web.Http.IHttpContent** value);
[propput] HRESULT Content([in] Windows.Web.Http.IHttpContent* value);
[propget] HRESULT Headers([out] [retval] Windows.Web.Http.Headers.HttpRequestHeaderCollection** value);
[propget] HRESULT Method([out] [retval] Windows.Web.Http.HttpMethod** value);
[propput] HRESULT Method([in] Windows.Web.Http.HttpMethod* value);
[propget] HRESULT Properties([out] [retval] Windows.Foundation.Collections.IMap<HSTRING, IInspectable*>** value);
[propget] HRESULT RequestUri([out] [retval] Windows.Foundation.Uri** value);
[propput] HRESULT RequestUri([in] Windows.Foundation.Uri* value);
[propget] HRESULT TransportInformation([out] [retval] Windows.Web.Http.HttpTransportInformation** value);
}
我可以将其转换为 Delphi 中的接口,就像 NineBerry 对上面链接中的其他接口所做的那样。(或者至少使用虚拟程序。还不确定参数的类型。)
但是如何从中创建一个对象,以便可以将它与“NavigateWithHttpRequestMessage”过程一起使用?
任何帮助甚至指向正确方向的指示都将不胜感激。
解决方案
如果您已经对接口有所了解,答案就相当简单。但我最终还是弄清楚了:
根据标题或 .idl 所说的内容创建您的界面:
[WinRTClassNameAttribute('Windows.Web.Http.HttpRequestMessage')]
IHttpRequestMessage = interface(IInspectable)
['{F5762B3C-74D4-4811-B5DC-9F8B4E2F9ABF}']
procedure Placeholder_ContentGet; safecall;
procedure Placeholder_ContentPut; safecall;
procedure Placeholder_HeadersGet; safecall;
procedure Placeholder_MethodGet; safecall;
procedure put_Method(value:IHttpMethod); safecall;
procedure Placeholder_PropertiesGet; safecall;
procedure Placeholder_RequestUriGet; safecall;
procedure put_RequestUri(source: IUriRuntimeClass); safecall;
procedure Placeholder_TransportInformationGet; safecall;
end;
然后在它下面添加一个 CoClass:
THttpRequestMessage = class(TWinRTGenericImportI<IHttpRequestMessage>)
end;
然后可以这样使用:
procedure TForm1.Button1Click(Sender: TObject);
var
req: IHttpRequestMessage;
begin
req := THttpRequestMessage.Create;
end;
推荐阅读
- azure - 使用资源所有者密码凭据流的 AD B2C 非交互式/无头身份验证
- c# - 如何从列表中获取重复的项目子字符串?C#
- sql - 如何在 SQL 中连接 3 个表
- internet-explorer - 在 IE 中为样式元素编辑为 HTML
- windows - 一起使用 InkCanvas、Inktoolbar 和地图
- html - 是否所有浏览器都会忽略 html 中的空行
- php - PHP foreach if isset
- c# - ASP.NET MVC 中的自定义路由绕过主控制器/索引
- jquery - 我想在jquery中获取数据
- jenkins - 将 groovy 字符串变量传递给 jenkins 作业 dsl 授权