如何使用 Chromium 发送帖子和标题数据?

2024-04-22

我正在尝试将一些代码从 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(使用前将#替换为@)

如何使用 Chromium 发送帖子和标题数据? 的相关文章

  • Delphi - 通过 ADO 查询获取 Excel 行

    我有以下 Excel 文件 我将 AdoConnection ConnectionString 设置为 AdoConnection ConnectionString Provider Microsoft Jet OLEDB 4 0 Data
  • 创建FileStream时如何处理异常

    我有一个这样的函数 我想重构它 function Myfunction sUrl sFile String Boolean var GetData TFileStream begin Result False if the line bel
  • delphi定时器比定时器服务中断例程更快

    大家好 我被要求为某人维护一个基于 Delphi 5 的程序 该程序使用一个计时器对象每 50 毫秒计时一次 并且在每次计时结束时运行单线程代码块 我只是想知道 如果执行这段代码所花费的时间比计时器滴答间隔长 会发生什么 这会很糟糕吗 例如
  • 递归遍历树视图中的节点?

    我有一个树视图 其中已经填充了另一个过程中的文件 文件夹 我想按照从上到下的确切顺序逐项迭代树视图中的项目 但是 与普通列表不同 我不能仅使用简单的for对此的声明 我必须进入每个节点等 我该怎么做呢 我希望有一种方法可以在不运行递归过程的
  • Delphi (Indy) TIdTCPClient 在线程中

    在互联网上 我看到通常将 TIdTCPClient 放置在自定义 TThread 后代中 为什么要这样做 有时我也在这样的线程中看到服务器 为什么 干杯 阿德里安 Indy 使用阻塞 I O 最好在线程中处理 这是 Indy 整体设计的核心
  • 如何在 Vista 上安装 Delphi 7

    我多次尝试在 Vista 上安装 Delphi 7 但 Vista 告诉我此应用程序 Delphi 7 存在已知问题 从而阻止了我这样做 我公司的其他几个人在 Vista 上安装 D7 时遇到了问题 由此得出的结论是 我们的 D7 应用程序
  • 如何确保 FormClose 程序运行,无论程序如何退出?

    在 Delphi 7 中 我有一个 TMainForm FormClose 过程 旨在在程序退出时写出一些状态 这在手动关闭程序时效果很好 但是 我发现如果程序被 Windows 强制 退出 例如在 Windows 更新后需要重新启动 则不
  • delphi 变量值在循环中的线程中发生变化

    我的代码正在运行一个 for 循环来处理一些数据 如下所示 procedure printValue Value Integer begin TThread Synchronize TThread Current procedure beg
  • 如何仅使用 TADOQuery 组件将图像插入数据库

    我有一个简单的基本问题 我正在尝试使用将图像插入数据库Insert与其他列值的语句也使用TADOQuery成分 由于代码已经由某人编写 因此我想在此处放置一些虚拟示例代码 以供您澄清相应的步骤 请注意 这可以正常工作TQuery组件 因为我
  • 如何遍历任意给定集合中的枚举?

    我有很多枚举类型 它们与相应的集合相结合 例如 type TMyEnum meOne meTwo meThree TMyEnums set of TMyEnum 我正在尝试提出一组可以运行的函数any枚举集 而不是为每个枚举编写单独的函数
  • Delphi 返回 TList 时出错

    我做了一个非常简单的应用程序 但我有一个我真的无法理解的问题 看一下这个基本代码 unit Unit1 interface uses Winapi Windows Winapi Messages System SysUtils System
  • 如何在 Delphi DBLookupComboBox 中选择正确的项目

    我有一个数据库查找组合框连接到数据库查询 那部分工作正常 当我运行程序时数据库查找组合框填充有查询的结果 我想看看数据库查找组合框填充第一项 请选择 当 的时候程序第一次运行或者当一个新项目行动已启动 见下图 另外 如果我正在加载以前保存的
  • Word 2010 自动化:“转到书签”

    我有一个用 Delphi 7 编写的程序 它打开一个基于模板的新 Word 文档 文档打开后 系统会自动跳转到书签 在模板中预定义 并在其中添加一些文本 以下代码在 Word 2003 中工作正常 但会导致invalid variant o
  • 具有 csOwnerDrawFixed 样式的组合框如何表现得像 csDropDown 样式?

    我正在使用一个组合框 http docwiki embarcadero com Libraries en Vcl StdCtrls TComboBoxstyle 属性设置为的组件csOwnerDrawFixed 我实现了绘图项一切工作正常
  • 石和磅的格式正确吗?

    我有一个图表 用于显示重量 以英石和磅 lbs 为单位 该图表由记录中的数据填充 对于权重 数据类型为 Double 记录数据是在运行时编辑的 我需要知道一种正确格式化输入数据的方法 为了更好地理解 首先看一下这些示例值 它们表示为石和磅
  • 每次 TDbGrid 的选定位置更改时都会触发什么事件?

    我的项目中有一个 TDbGrid 每次更改所选行时我都试图触发一个事件 行中的任何更改都已经更新了链接到同一数据源的所有数据感知控件 但还需要进行其他更改 我需要一个事件处理程序 我认为 OnColEnter 会起作用 根据帮助文件 它在以
  • 为什么 {$ifopt FINITEFLOAT ON} 无法编译?

    我有这样的构造 ifopt FINITEFLOAT ON message FINITEFLOAT option ON else message FINITEFLOAT option OFF endif 在我的源代码中 它不会编译 这一定是一
  • TObjectList.Contains 导致 Delphi 2009 中的访问冲突

    在 Delphi 2009 中 到目前为止 我在泛型方面没有遇到大问题 使用 Generics Collections 列表 没有特殊的泛型功能 现在我发现这段代码会在访问的行中导致AVMyList Contains 如果我声明 TMyLi
  • 如何从 VCL.Graphics 获取所有已注册的文件格式...但 64 位

    在我的 32 位应用程序中 我使用FindRegisteredPictureFileFormats 单元由 Cosmin Prund 提供 https stackoverflow com a 14677532 505088 gt 如何从图形
  • Delphi IDE导致CPU过热

    我正在使用 Delphi 7 但我已经尝试过 Delphi 2005 2010 版本 在所有这些新版本中 当 Delphi IDE 在屏幕上可见时 我的 CPU 利用率为 50 一个核心为 100 另一个核心为 宽松 当 IDE 最小化时

随机推荐

  • Aurelia 自定义属性中的双向绑定

    UPDATE 看起来这是一个已知的错误 https github com aurelia templated issues 253 https github com aurelia templating issues 253我将其留在这里是
  • 在项目 .d.ts 定义文件中使用 @types 定义

    我正在尝试为我的项目编写一个 d ts 文件来定义一些全局接口 但是 我在该定义文件中使用非全局库类型时遇到问题 特别是我试图引用的 RxJs 对我来说不起作用 我认为最有效的方法是使用三斜杠引用标签来导入 RxJ 的类型 但这不起作用
  • Masonry 插件:调整 div 大小不会导致重新洗牌

    将 Masonry 项目包裹在 1000px 宽的 div 中 我有一个按钮可以使用 jQuery 将 div 大小调整为 2000xaddClass 问题是 Masonry 不会重新排列项目来填充额外的 1000px 空间 我知道调整大小
  • PageViewController - 将变量传递给子视图

    我拥有的 我有一个 ViewController TutorialViewController 和一个 UIPageViewController TutorialPageViewController 故事板上还有 3 个带有 StoryBo
  • Paramiko 和伪 tty 分配

    我正在尝试使用 Paramiko 连接到远程主机并执行许多文本文件替换 i o e client exec command perl p i e s initial replaced g conf 其中一些命令需要作为 sudo 运行 这会
  • 用于创建工作项模板的 TFS 客户端 API?

    当然 很可能在 TFS 中创建工作项 获取工作项列表等 除此之外 我们还需要具有允许用户为各种文件类型创建自己的工作项模板的功能 TFS 客户端 API 是否能够将工作项模板上传到 TFS 服务器 有一种方法可以获取 XML 定义 Micr
  • 在函数内调用 div

    我正在尝试使用 jQuery mobile 1 4 3 创建一个类似于 iOS 警报视图的弹出窗口 我需要从 javascript 事件触发警告消息 例如带有 确定 按钮的确认消息 显示对 Web 服务的 ajax 响应调用 我的第一个问题
  • # jquery移动页面url中的字符

    为什么当我访问我的 jQuery 移动页面时 假设 page php 显示正常 但当我访问同一页面 page php someDetailsHere 时 它 只显示一个白色页面 我该如何解决这个问题 我使用第三方应用程序重定向到我的网页 添
  • 通过 Kafka 消费者重试维持订单保证

    我正在为基于 Kafka 的数据处理管道中的消费者重试设计一个架构 我们正在使用 Kafka 生产者和消费者 并且正在考虑重试主题 如果消费出错 将在这些主题上发送消息 将会有消费者以一定的节奏运行这些重试主题 我读了很多参考架构 但没有一
  • 渲染图表后,从图表对象更改 Highcharts 工具提示格式化程序

    我发现我可以使用 setData 更改系列 并且我知道我可以使用 setExtremes 修改最大值 但我无法弄清楚如何从图表对象设置工具提示格式化程序 我如何更新该字段 如果我有一个图表对象 如何更新其工具提示格式化程序属性 以及plot
  • 如何让我的收据不再重复

    这是一个程序 要求用户输入条形码 然后我的程序找到指定的产品 询问用户他们想要购买多少产品 如果他们想继续 计算总价 然后假设打印出收据 但是我的问题是收据重复其值并且没有四舍五入到小数点后两位 press 0 to stop shoppi
  • 如何在postgreSQL命令中指示在哪个数据库中执行脚本? (类似于SQL Server“use”命令)

    我有以下问题 我需要放入一个在新版本推出之前运行的脚本 该脚本在 PostgreSQL 中启用 pgAgent 的 SQL 代码 但是 此代码应该在维护数据库 postgres 上运行 而我们运行脚本文件的数据库是另一个数据库 我记得在 S
  • 如何检测视频标签上播放的视频的帧速率?

    有什么方法可以通过 javascript 检测视频 html5 标签中引用的视频的帧速率是多少 我还在寻找比特率和编解码器信息 因为 html5 视频播放器与编解码器无关 thanks FPS 存储在video文件的标题 这是您正在寻找的实
  • 使用 Swift array.count 和 arc4random()

    为了让这段代码正常工作 我缺少什么 NodesLeft 是一个 Int let x nodesLeft count let r Int arc4random uniform x 我收到错误 Playground 执行失败 错误 136 40
  • Javascript:在数组末尾重新启动一次循环

    我最近遇到了这个问题 但在任何地方都找不到好的答案 因此有这个问题 我想在到达终点后重新启动循环 但只循环有限的次数 在这个特定的上下文中 我一周中有一系列天 我想使用以下命令显示从今天开始的接下来 7 天的日期名称Date getDay
  • 为什么 C++ 编译器对许多大括号的处理方式不同?

    在下面的 C 20 程序中 我错误地添加了一对额外的弯曲大括号 in B A include
  • 如何在样式组件中访问 Material-ui 的主题

    我将 CRA 与 Material ui 和 Styled Components 类型的样式一起使用 在构建 CSS 时 我想访问 Material ui 的默认主题 package json 的一部分 dependencies react
  • 两点层之间的距离矩阵

    我有两个数组 其中包含不同大小的点坐标 shapely geometry Point Eg Point X Y Point X Y Point X Y Point X Y 我想用距离函数创建这两个数组的 叉积 距离函数来自shapely g
  • RETROFIT 如何解析此响应

    我正在尝试解析这个 json 响应雅虎YQL http chartapi finance yahoo com instrument 1 0 goog chartdata type quote range 1d json使用 Retrofit
  • 如何使用 Chromium 发送帖子和标题数据?

    我正在尝试将一些代码从 TWebBrowser 转换为 Chromium 但无法弄清楚如何使用 HTTP 请求发送帖子和标头数据 下面是我正在尝试实现的 TWebBrowser 功能 var VHeader PostData OleVari