【散分】idHTTP登录NTLM验证方式的网页,终于解决了,留作备忘以助后来人
郁闷,一个idHTTP登录NTLM验证的网页的功能搞了好几天,百度、Google搜了很久,中文英文资料都看了,都没搞定。
直到今天才发现,其实很简单:
从NTLM验证的原理看,NTLM需要三次访问才能正确验证成功,所以只要Get三次就可以了。
代码如下:
var
RStream: TStringStream;
begin
//测试:网页验证
RStream:=TStringStream.Create('');
idHTP.Request.Username:='AD\' + User; //AD是域名
idHTP.Request.Password:=Password;
idHTP.Request.BasicAuthentication:=False;
try
idHTP.Get('http://网址',RStream);
RStream.Clear;
idHTP.Get('http://网址',RStream);
RStream.Clear;
idHTP.Get('http://网址',RStream);
ShowMessage(RStream.DataString); //返回正确的网页,爱干嘛干嘛去吧
except
on E:Exception do
begin
if Pos('401',E.Message)>0 then
ShowMessage('域账号/密码验证失败!')
else
ShowMessage(E.Message);
end;
end;
end;
就这么简单,只要Get三次,取最后一次返回的内容即可。idHTTP的MaxAuthRetries必须大于等于3,其他基本没啥关系了。不需要OnAuthorization,不需要SelectAuthorization,不需要Uses IdAuthenticationNTLM, IdAuthenticationSSPI。
进来顶贴就有分,送完为止,虽然分不多,不过我的等级也只能设置100分最多了。
[解决办法]
接分~~ lz分享的精神狠好
[解决办法]
只要Get三次,取最后一次返回的内容
[解决办法]
lz 我 沙发 + 板凳 啊~ 记得多给点分啊
[解决办法]
恭喜楼主问题解决.
[解决办法]
恭喜楼主问题解决。顺便学习了get三次的取址方法
------解决方案--------------------
接分人士,发来贺电,恭喜恭喜!
[解决办法]
膜拜一下,呵呵
[解决办法]

[解决办法]

楼主真是好人啊。。。
[解决办法]
恭喜楼主问题解决。顺便学习了
[解决办法]