我正在使用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)
答案 0 :(得分:3)
假设用于身份验证的用户名和密码是user1和pass1。使用以下语句提供重定向后不会丢失的基本身份验证信息:
Me.HelpBrowser.Navigate("http://user1:pass1@www.mysite.com")
答案 1 :(得分:2)
默认情况下,在每个KB834489的IE中,已禁用在URL中传递凭据。
必须进行注册表更改才能进行此类导航:
要在Windows资源管理器和Internet Explorer中禁用新的默认行为,请在以下某个注册表项中创建iexplorer.exe
和explorer.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());
}