首页 > 解决方案 > Delphi - ADVFN 登录问题

问题描述

使用带有 Indy 的 Delphi 10.3 我尝试登录 ADVFN。我已经使用 ADVFN 设置了一个帐户,并使用 Firefox 调试器等跟踪了网络流量。

我尝试了多个 IdHTTP 示例,但仍然没有成功。

任何帮助,将不胜感激。

我正在尝试获取最大赢家列表,并使用返回的原始 html 代码填充备忘录。

// get cookies first...
IdHTTP1.Request.UserAgent := 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:12.0) Gecko/20100101 Firefox/12.0';

LString := IdHTTP1.Get('https://uk.advfn.com');


// now submit the webform...
Params := TStringList.Create;
try
  Params.Add('redirect_url=aHR0cHM6Ly91ay5hZHZmbi5jb20=');
  Params.Add('site=uk');
  Params.Add('login_username=MYUSERNAME');
  Params.Add('login_password=MYPASSWORD');

  IdHTTP1.Post('https://uk.advfn.com', Params);

  LString := IdHTTP1.Get('https://uk.advfn.com/insights/toplist/london/percentage-gainer/price');

  Memo1.Lines.Text := LString;
finally
  Params.Free;
end;

标签: delphiindyidhttp

解决方案


您正在POST将登录请求发送到错误的 URL。

位于https://uk.advfn.com您尝试提交的实际帖子的 HTML 网络表单https://secure.advfn.com/login/secure,而不是https://uk.advfn.com像您编码的那样:

<form action="https://secure.advfn.com/login/secure" id="login_form" name="login_form" method="POST" target="">
IdHTTP1.Post('https://secure.advfn.com/login/secure', Params);

此外,<input>该网络表单中有第 5 个字段您未提交:

<input  class="button"  tabindex="3" type="submit"   value="Log In" id="login_submit">
Params.Add('login_submit=Log In');

提交网络表单时,您必须根据 HTML 规范提交每个非空 <input>值。

最后,在提交基于 Web 的身份验证的 Web 表单时,了解登录是否成功的唯一方法是分析响应 HTML 以查看它是否包含您所期望的内容。与基于 HTTP 的身份验证不同,在基于 HTML 的身份验证中没有可以查找的特殊响应代码。GET在发送请求之前,您应该确保您的登录确实成功https://uk.advfn.com/insights/toplist/london/percentage-gainer/price


推荐阅读