首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

【散分】idHTTP登录NTLM证验方式的网页,终于解决了,留作备忘以助后来人

2013-09-07 
【散分】idHTTP登录NTLM验证方式的网页,终于解决了,留作备忘以助后来人郁闷,一个idHTTP登录NTLM验证的网页的

【散分】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三次的取址方法

------解决方案--------------------


接分人士,发来贺电,恭喜恭喜!
[解决办法]
膜拜一下,呵呵
[解决办法]
【散分】idHTTP登录NTLM证验方式的网页,终于解决了,留作备忘以助后来人
[解决办法]
【散分】idHTTP登录NTLM证验方式的网页,终于解决了,留作备忘以助后来人
楼主真是好人啊。。。
[解决办法]
恭喜楼主问题解决。顺便学习了
[解决办法]
【散分】idHTTP登录NTLM证验方式的网页,终于解决了,留作备忘以助后来人

热点排行