Joh*_*nny 1 delphi login indy10 delphi-xe
我正在使用Indy 10.5.7
我最近看到了如何使用Indy登录具有有效凭据的网站.现在我可以执行搜索并返回我需要的结果.
但是,我还是有问题.我必须理所当然地认为我已成功登录页面重定向,因为我无法获得200以外的响应代码.
我的意思是,我想处理用户输入用户名或密码输入错误的情况,并至少告诉他们有什么不对劲.
为了这个问题,我把Indy设置如下......
var
client : TidHTTP;
cookieMan : TidCookieManager;
params : TStringList;
response : string;
begin
cookieMan := TidCookieManager.Create(nil);
client := TidHTTP.Create(nil);
params := TStringList.Create;
try
with client do
begin
ProtocolVersion := pv1_1;
HTTPOptions := [hoForceEncodeParams, hoKeepOrigProtocol];
AllowCookies := True;
cookieManager := cookieMan;
HandleRedirects := True;
//Request.UserAgent := 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0';
//Request.UserAgent := 'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.103 Safari/537.36';
Request.UserAgent := 'Mozilla/5.0 (X11; U; Linux i586; en-US; rv:1.7.3) Gecko/20040924 Epiphany/1.4.4 (Ubuntu)';
//OnRedirect := handleRedirect;
end;
params.Add('username=aFakeUser');
params.Add('password=aFakePass');
try
response := client.Post('http://assurance.redtractor.org.uk/rtassurance/services.eb', params);
mmoResponseCodes.Lines.Add('No exception, INDY OK ' + intToStr(client.ResponseCode)); // << ALWAYS returns 200
// do nothing with params ... just to try to raise any exception
// I need to be logged in to reach the next page, this is a search page ...
response := client.Post('http://assurance.redtractor.org.uk/rtassurance/services/cr_services/checking.eb', params);
mmoResponseCodes.Lines.Add('Still no exception, INDY OK ' + intToStr(client.ResponseCode)); // << ALWAYS returns 200
mmoResponse.Text := response;
except
on e: EIdHTTPProtocolException do
begin
// No exception raised, I expected e.ErrorCode = 401
mmoResponseCodes.Lines.Add('Post Indy Error ' + intToStr(e.ErrorCode) + ' >>> ' + e.Message);
end;
end;
finally
client.Free;
cookieMan.Free;
params.Free;
end;
end;
Run Code Online (Sandbox Code Playgroud)
我真的不知道我做错了什么.我已经看到Remy的很多帖子指出要捕获异常并查看e.ErrorCode,但我不能用我故意伪造的凭据引发异常.
我可以请你指出我正确的方向,并指出我做错了什么?
您正在使用基于HTML的身份验证(发布的HTML Webform),而不是基于HTTP的身份验证(HTTP Authentication请求标头).
从HTTP的角度来看,HTML webform的失败身份验证仍然可以在HTTP层报告为成功的200回复.客户端请求了URL,服务器发送了一个HTML页面作为回复.无论HTML声明身份验证成功还是失败都无关紧要,HTTP只是一种传输,它并不关心正在传递的特定内容.仅在发生HTTP层错误时才会报告HTTP错误.如果HTML身份验证失败,则生成的HTML页面通常会再次包含错误消息和/或登录HTML webform.
因此,在这种情况下,您将获得HTTP 200回复,因为HTTP成功完成了它的工作.您将不得不分析返回的实际HTML以了解身份验证是否真的成功或失败.HTTP层没有任何指示方式.
| 归档时间: |
|
| 查看次数: |
261 次 |
| 最近记录: |