带有附加标头的.NET Webbrowser控件

时间:2009-12-16 22:16:09

标签: vb.net browser

我正在使用webbrowser控件并加载使用基本身份验证的网站。我在导航例程的附加标题中传递用户名和密码。问题是导航网站时不保留标题。

即。 我登录该站点并在http标头中传递用户名和密码。当我单击链接以访问另一个页面时,标题将被删除,并且站点会要求提供凭据。如果我只是将网站键入IE并在第一次登录所有页面上的标题。

任何人都有任何想法如何让页面保留标题,以便用户永远不必进行身份验证?

Dim sHeaders As String
Dim HelpBrowser As New WebBrowser

sHeaders = "Authorization: Basic: " & System.Convert.ToBase64String(System.Text.Encoding.ASCII.GetBytes("UserName:Password")) & Chr(13) & Chr(10)

Me.HelpBrowser.Navigate("http://www.mysite.com", True, Nothing, sHeaders)

3 个答案:

答案 0 :(得分:3)

假设用于身份验证的用户名和密码是user1和pass1。使用以下语句提供重定向后不会丢失的基本身份验证信息:

Me.HelpBrowser.Navigate("http://user1:pass1@www.mysite.com")

答案 1 :(得分:2)

默认情况下,在每个KB834489的IE中,已禁用在URL中传递凭据。

必须进行注册表更改才能进行此类导航:

要在Windows资源管理器和Internet Explorer中禁用新的默认行为,请在以下某个注册表项中创建iexplorer.exeexplorer.exe DWORD值,并将其值数据设置为0.

•对于该程序的所有用户,请在以下注册表项中设置值:

HKEY_LOCAL_MACHINE\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_HTTP_USERNAME_PASSWORD_DISABLE

•仅对于程序的当前用户,请在以下注册表项中设置值:

HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_HTTP_USERNAME_PASSWORD_DISABLE

有关详细信息,请参阅: http://support.microsoft.com/default.aspx?scid=kb;[LN];834489

答案 2 :(得分:0)

以下是c#,但我希望vb有一个类似的导航事件。我发现,为了能够在没有授权标题丢失或删除的情况下导航网站,我必须执行以下操作,否则每个新页面都会再次提示用户。此解决方案也不需要用户:password @ site语法启用。

    private bool _redirected = false;
    private const string BaseUrl = @"http://mySite";

    private void Navigate()
    {
        var helpUrl = BaseUrl;
        var authHeader = GetAuthHeader();

        _docWindow.Browser.Navigate(helpUrl, string.Empty, null, authHeader);           
        _docWindow.Browser.Navigating += Browser_Navigating;

    }

    private string GetAuthHeader()
    {
        byte[] authData = UnicodeEncoding.UTF8.GetBytes(_userName + ":" + _password);
        string authHeader = "Authorization: Basic " + Convert.ToBase64String(authData);
        return authHeader;
    }

    void Browser_Navigating(object sender, System.Windows.Navigation.NavigatingCancelEventArgs e)
    {            
        if (_redirected)
        {
            _redirected = false;
            return;
        }
        var newPage = BaseUrl + e.Uri.AbsolutePath;

        e.Cancel = true;
        _redirected = true;
        _docWindow.Browser.Navigate(newPage, string.Empty, null, GetAuthHeader());
    }