Delphi 7 TIdHttp post 具有可变字段的表单

Delphi 7 TIdHttp post a form with variable fields

我需要有关学校相关问题的帮助。

这是去年的测试,但我忘记了答案,这一年很忙,我不记得杰克了,因为我们不再使用 Delphi。

我们有这个网络表单:

<form action="action" id="id" method="post">

    <input type="text" name="var_name_1" value="var_value_1"/>
    <input type="text" name="var_name_2" value="var_value_2"/>

    <input type="text" name="constant_name" value="constant_value" />
    <input type="submit" name="button" value="submit" />
</form>

var_name_1var_name_2var_value_1var_value_2 是四个不同的字段名称和值,它们会在每次请求页面时发生变化,例如它们可以是像这样

<input type="text" name="12345" value="566"/>
<input type="text" name="1222" value="4444abcd"/>

如果您再次请求该页面,他们会喜欢这个

<input type="text" name="666" value="123456789"/>
<input type="text" name="XXXLUKEXXX" value="A is the first letter"/>

我相信你明白了,我只是想再澄清一些。

我记得如何 Post 使用 Indy 组件(我认为):

c := tidhttp.Create(self);
p := tstringlist.Create;

p.Add('var_name_1=var_value_1');
p.Add('var_name_2=var_value_2');
p.Add('constant_name=constant_value');
p.Add('button=submit');

result := c .Post('http://www.test.com',p);

p.Free;
c.Free;

但我不知道如何获取这些随机字段名称和值。特别是他们改变了。我知道如何用 TWebBrowser 做到这一点,但我需要 Indy 版本,因为我们转移到原始套接字。

要完成您的要求,您必须下载实际的 HTML 本身(例如 TIdHTTP.Get())并从中解析网络表单数据,就像任何网络浏览器一样到。解析 HTML 超出了 Indy 本身的范围。有第 3 方 HTML 解析器可用于 Delphi,或者您可以手动解析 HTML,因为您确切地知道自己在寻找什么。