delphi - 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;
解决方案
您正在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
。
推荐阅读
- r - 减小图例字体大小,在 ylabel 中添加百分比符号并在 R 雷达图中添加自定义轴?
- mongodb - 将文档数组中的所有元素与输入数组匹配
- java - Java泛型多类型边界擦除,我们应该将哪些类/接口放在边界列表的开头
- python - 提交后从 kivymd 清除 MDTextField
- ruby-on-rails - 如何从 API 中检索 URL 的图像并将其显示在我的视图中
- javascript - 如何在角度打字稿中重用逻辑进行升序和降序排序
- sql - COGNOS:在 Cognos 中将 SQL 日期提示转换为日期提示
- c# - 手动处理装配加载
- php - 如何在没有性能开销的情况下将 Xdebug 模块加载到 PHP 中?
- javascript - 意外值 - e.target.value