You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Delphi(Delphi7)创建并提交网页POST表单?

Delphi7实现网页POST表单提交指南

嘿,我来帮你搞定Delphi7里的POST表单提交问题!针对你给出的那个表单结构,我给你两种实用的实现方式,都是Delphi7环境下完全可行的:

方法一:使用Indy的IdHTTP组件(推荐,高效直接)

这是程序主动提交POST数据的最优方案,不需要加载整个网页,直接发送请求。

步骤说明:

  1. 添加组件:在Delphi7的组件面板里找到Indy Clients分类,拖一个TIdHTTP组件到你的窗体上(或者动态创建,代码示例里用的是动态创建)。
  2. 准备POST数据:把表单的键值对整理成字符串列表,注意特殊字符要URL编码。
  3. 设置请求头:指定Content-Type为application/x-www-form-urlencoded,这是HTML表单默认的提交格式。
  4. 发送POST请求:调用IdHTTP的Post方法,传入目标URL和数据。

完整代码示例:

uses
  IdHTTP, IdURI; // 必须添加这两个单元

procedure TForm1.btnSubmitClick(Sender: TObject);
var
  IdHTTP: TIdHTTP;
  PostData: TStringList;
  ResponseContent: string;
begin
  // 动态创建组件,避免窗体上的组件依赖
  IdHTTP := TIdHTTP.Create(nil);
  PostData := TStringList.Create;
  try
    // 添加表单字段:对应你表单里的TestName输入框
    // 用TIdURI.URLEncode处理特殊字符,比如空格、中文等
    PostData.Add('TestName=' + TIdURI.URLEncode('SomeValue'));

    // 设置请求头,模拟标准表单提交
    IdHTTP.Request.ContentType := 'application/x-www-form-urlencoded';

    // 处理HTTPS(如果目标URL是https开头)
    // 需添加IdSSLIOHandlerSocket单元,然后绑定IOHandler
    // IdHTTP.IOHandler := TIdSSLIOHandlerSocket.Create(IdHTTP);

    try
      // 发送POST请求,注意URL要写完整的协议前缀(http://或https://)
      ResponseContent := IdHTTP.Post('http://www.TestAddress.com/TestPage.php', PostData);
      ShowMessage('提交成功!服务器返回:' + ResponseContent);
    except
      on E: Exception do
        ShowMessage('提交失败:' + E.Message);
    end;
  finally
    // 释放资源
    PostData.Free;
    IdHTTP.Free;
  end;
end;

方法二:使用WebBrowser组件模拟用户提交

如果需要先加载网页、模拟用户填写表单再提交,可以用这种方式,完全模拟浏览器操作。

步骤说明:

  1. 添加组件:拖一个TWebBrowser组件到窗体上。
  2. 加载目标页面:导航到表单所在的URL。
  3. 操作DOM元素:通过HTML DOM找到表单和输入框,设置值后调用提交方法。

完整代码示例:

uses
  MSHTML; // 必须添加这个单元来操作HTML DOM

procedure TForm1.btnSimulateSubmitClick(Sender: TObject);
var
  HTMLDoc: IHTMLDocument2;
  TargetForm: IHTMLFormElement;
  TestNameInput: IHTMLInputElement;
begin
  // 导航到表单页面
  WebBrowser1.Navigate('http://www.TestAddress.com/TestPage.php');

  // 等待页面完全加载
  while WebBrowser1.ReadyState <> READYSTATE_COMPLETE do
  begin
    Application.ProcessMessages;
    Sleep(50);
  end;

  // 获取HTML文档对象
  HTMLDoc := WebBrowser1.Document as IHTMLDocument2;
  if not Assigned(HTMLDoc) then Exit;

  // 获取目标表单:如果表单有name属性可以用name查找,这里用索引(第一个表单)
  TargetForm := HTMLDoc.forms.item(0, EmptyParam) as IHTMLFormElement;
  if not Assigned(TargetForm) then Exit;

  // 找到TestName输入框并设置值
  TestNameInput := TargetForm.elements.item('TestName', EmptyParam) as IHTMLInputElement;
  if Assigned(TestNameInput) then
    TestNameInput.value := 'SomeValue';

  // 提交表单
  TargetForm.submit;
  ShowMessage('已模拟提交表单!');
end;

注意事项:

  • 如果目标URL是HTTPS,方法一中需要额外添加IdSSLIOHandlerSocket组件并绑定到IdHTTP的IOHandler属性,否则会报错。
  • 方法二中要确保页面加载完成后再操作DOM,否则会找不到元素。
  • 处理中文或特殊字符时,记得用TIdURI.URLEncode编码,避免乱码。

内容的提问来源于stack exchange,提问作者nader

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:03:55