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

Dreamia 2013-09-04 04:47:17
郁闷,一个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分最多了。
...全文
438 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
自然静 2013-09-24
  • 打赏
  • 举报
回复
不明觉厉。顶分享的心态。 顺便求一下,如何了解idhttp返回网页的编码转换问题, s:=idhttp1.get(url) 如何判断,正确显示s内容(直接显示出现很多乱码) 指导一下看那些资料
simonhehe 2013-09-05
  • 打赏
  • 举报
回复
xgwzw0011 2013-09-05
  • 打赏
  • 举报
回复
恭喜楼主问题解决。顺便学习了
babydog01 2013-09-05
  • 打赏
  • 举报
回复
楼主真是好人啊。。。
babydog01 2013-09-05
  • 打赏
  • 举报
回复
tianpanhaha 2013-09-05
  • 打赏
  • 举报
回复
膜拜一下,呵呵
mingajian 2013-09-04
  • 打赏
  • 举报
回复
接分人士,发来贺电,恭喜恭喜!
arSavior 2013-09-04
  • 打赏
  • 举报
回复
恭喜楼主问题解决。顺便学习了get三次的取址方法
yaowz27 2013-09-04
  • 打赏
  • 举报
回复
恭喜楼主问题解决.
CCDDzclxy 2013-09-04
  • 打赏
  • 举报
回复
lz 我 沙发 + 板凳 啊~ 记得多给点分啊
jingcuo 2013-09-04
  • 打赏
  • 举报
回复
只要Get三次,取最后一次返回的内容
CCDDzclxy 2013-09-04
  • 打赏
  • 举报
回复
接分~~ lz分享的精神狠好

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧