none
求解答.... RRS feed

  • 问题

  • IE代理相关问题.

    1.能否在我的代码中去调用IE代理的用户名和密码框?微软是否有提供接口?

    2.我使用了CDHtmlDialog间接的将用户名和密码框弹出来,怎么获取在用户名和密码框中输入的用户名和密码?

    3.我代码中设置了IE代理,就会去注册表中获取IE的代理信息,IP和端口。然后发出包,接收带代理服务器发来的407错误,我能将此消息通过IE鉴权,让IE去弹框。。。   也就是说,能否 《我的客户端》《----》IE《----》代理服务器   让IE作为中转?这样就省事多了.   怎么弄呢?

    谢谢.

    2011年12月16日 1:20

答案

  • 蒋晟大哥,你的意思应该我明白了,自定义身份验证不是我想要的,因为我要是去使用你说的方法,我就完全可以自己做一个跟IE验证框一样的对话框,只要收到代理服务器传过来的407我就弹出来,获取user和passwd就方便多了。但是这样就没经过IE了。也不是什么IE代理了。

     

    不知道IE代理到底是怎么回事。汗!没这方面的资料。。。

     

    我想了几种尝试,间接的获取IE验证框中的用户名和密码,都失败了。

    1.在我的软件中添加一个浏览器控件,当收到407就使用该控件去访问一个网站,这时就会弹出IE验证输入框,然后输入密码和用户名。使用枚举窗口,获取到IE系统对话框的句柄,然后获取用户名和密码,其他的控件可以获取到,居然密码不可以获取到,郁闷。。。。

    2.开始以为IE验证提示框的资源在browseui.dll中,就去获取这个dll中IE验证提示框的资源,然后去派生一个dialog类,这样我就想怎么弹就怎么弹。  结果是browseui.dll中没有RT_DIALOG资源...汗!又不知道这个对话框的资源在哪...迷茫中....

     

    意外的发现在1中,当弹出IE验证框,输入按确定后,居然我的软件中发出的http包中有Base64编码的用户名和密码...晕了。。。。  太深奥了!...   

    • 已标记为答案 西瓜头 2011年12月19日 8:29
    2011年12月17日 17:31

全部回复

  • 没人回答啊?求教啊!

    2011年12月16日 10:09
  • 1. 是有接口的,InternetSetOption应该可以实现,具体例子需见MSDN

    2. 这个应该不行

    3. 这个不行,IE没有那么开放,没有直接的接口


    0xBAADF00D
    2011年12月16日 10:43
    版主
  • 1.InternetSetOption这个函数可以设置用户名和密码,而我是想获取弹出用户名和密码框输入后点击确定后的用户名和密码,而不是开始就自己设置。

     

    比如在使用QQ软件的时候,我们先设置IE的代理IP,端口(注:此代理需要用户名和密码验证),然后在QQ的登录界面使用IE代理,登录时会弹出IE的验证框,输入后可以登录。  腾讯是怎么实现的呢?

     

    我有听说过 IE代理的原理:说什么底层会进行IE健全,用户名和密码框会自动弹出来,什么什么的...我不是很清楚原理。 求指导。拜谢。。。

     

    我就想实现我的客户端使用IE代理时,需要验证,弹出用户名和密码输入提示框。能和QQ一样登录正常。   

    2011年12月16日 11:49
  • 要在你的程序支持代理身份验证的话,需要实现IAuthenticate和IAuthenticateEx

    IE在调用IAuthenticate方面有一些bug,比如在当前文档不是网页的时候不会调IAuthenticate(需要安装KB329802修复)

     



    The following is signature, not part of post
    Please mark the post answered your question as the answer, and mark other helpful posts as helpful, so they will appear differently to other users who are visiting your thread for the same problem.
    Visual C++ MVP
    2011年12月16日 17:53
    版主
  • 哇,蒋晟大哥. 恩,你知道IE代理的原理吗?

    也就是使我发出的和收到的消息去IE进行鉴权?

    您上面说的用IAuthenticate和IAuthenticateEx,具体怎么使用呢?能达到我需要的效果吗?

    2011年12月17日 6:03
  • 我查到一种方法,能否在加载IE代理验证框的那个资源DLL,获取到这个对话框的资源,然后创建一个这样的dialog,后面自己想怎么操作就怎么操作了。

    但是遇到问题了,不知道是不是browseui.dl, 去枚举这个dll的RT_DIALOG资源时返回错误。调用EnumResourceNames不成功。 唉!烦死了。

     

    高手们帮帮忙啊。帮我想想法子咯。

    2011年12月17日 14:39
  • IE的网络层是WinInet,所以 WinInet的API可以影响IE的行为,比如UrlMkSetSessionOption

    IAuthenticate是MSHTML提供的扩展接口,用来自定义身份验证的界面,在服务器挑战用户身份的时候触发。



    The following is signature, not part of post
    Please mark the post answered your question as the answer, and mark other helpful posts as helpful, so they will appear differently to other users who are visiting your thread for the same problem.
    Visual C++ MVP
    2011年12月17日 15:45
    版主
  • 蒋晟大哥,你的意思应该我明白了,自定义身份验证不是我想要的,因为我要是去使用你说的方法,我就完全可以自己做一个跟IE验证框一样的对话框,只要收到代理服务器传过来的407我就弹出来,获取user和passwd就方便多了。但是这样就没经过IE了。也不是什么IE代理了。

     

    不知道IE代理到底是怎么回事。汗!没这方面的资料。。。

     

    我想了几种尝试,间接的获取IE验证框中的用户名和密码,都失败了。

    1.在我的软件中添加一个浏览器控件,当收到407就使用该控件去访问一个网站,这时就会弹出IE验证输入框,然后输入密码和用户名。使用枚举窗口,获取到IE系统对话框的句柄,然后获取用户名和密码,其他的控件可以获取到,居然密码不可以获取到,郁闷。。。。

    2.开始以为IE验证提示框的资源在browseui.dll中,就去获取这个dll中IE验证提示框的资源,然后去派生一个dialog类,这样我就想怎么弹就怎么弹。  结果是browseui.dll中没有RT_DIALOG资源...汗!又不知道这个对话框的资源在哪...迷茫中....

     

    意外的发现在1中,当弹出IE验证框,输入按确定后,居然我的软件中发出的http包中有Base64编码的用户名和密码...晕了。。。。  太深奥了!...   

    • 已标记为答案 西瓜头 2011年12月19日 8:29
    2011年12月17日 17:31