【发布时间】:2018-08-24 05:44:08
【问题描述】:
我正在尝试创建https://umod.org/login 的登录名,但我很难理解它是如何工作的。为什么我要创建登录?他们的站点 API 对访客的速率限制为 40,对会员的速率限制为 100。我基本上想在使用 api 时保持登录会话。
我的理解是我需要以某种方式登录并获取 cookie。
我一直在查看一些帖子,但我感到很沮丧,因为我根本无法让它发挥作用。我发现了这样的问题:Log in to website from Delphi 和Delphi - logging in to webpage from code 让我有点了解。
那我做了什么?我使用了检查元素来获取登录页面上输入字段的字段名称。电子邮件字段有一个名为 email 的 id,但当我点击刷新时,这两个字段的名称都会更改。
我已经编写了以下代码,但没有成功:
procedure Login(const aUsername, aPassword: string);
var
http: TIdHTTP;
ssl: TIdSSLIOHandlerSocketOpenSSL;
params: TStringList;
begin
http := TIdHTTP.Create(nil);
try
ssl := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
try
ssl.SSLOptions.SSLVersions := [sslvTLSv1, sslvTLSv1_1, sslvTLSv1_2];
http.IOHandler := ssl;
http.HandleRedirects := True;
http.Request.UserAgent := 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:61.0) Gecko/20100101 Firefox/61.0';
http.AllowCookies := True;
http.Get('https://umod.org/login');
params := TStringList.Create;
try
params.Add('email=' + aUsername);
params.Add('password=' + aPassword);
params.Add('remember=1');
params.Add('redirect=https://umod.org/');
http.Post('https://umod.org/login', params);
finally
params.Free;
end;
finally
ssl.Free;
end;
finally
http.Free;
end;
end;
我收到以下错误:EIdHTTPProtocolException: HTTP/1.1 419 unknown status
【问题讨论】:
-
恐怕你找不到一个简单的方法。您会看到站点不断更改这些字段名称的原因是为了防止使用各种机器人进行自动登录。我建议您与网站所有者联系,因为查看他们的常见问题解答网站,他们正在开发一些对社区有用的应用程序。
-
哦,我明白了。谢谢(你的)信息。我会要求他们进行某种身份验证。
标签: delphi indy indy10 delphi-10.2-tokyo