【问题标题】:WebBrowser.Navigate(); How to pass ntlm credentialsWebBrowser.Navigate();如何传递 ntlm 凭据
【发布时间】:2011-02-17 10:30:09
【问题描述】:

我创建了一个网页捕获实用程序,它通过一个 httphandler 运行,可以轻松访问公共站点并创建屏幕截图。

问题:我正在尝试访问本地 Sharepoint 站点,该站点需要 NTLM 凭据才能查看我尝试截屏的页面。

当我执行 WebBrowser.Navigate(Sharepointsite) 时,我收到一个 401 挑战以通过凭据。现在因为这是作为后台服务运行的,所以我需要自动传递凭据。目前,浏览器只是挂起并等待凭据。我已经查看了可以在 Navigate 方法中传递的标头中传递的凭据,但仍然没有运气......

这是我执行函数的代码。

ICredentials cred = new NetworkCredential(username, password, domain);
String authorisationHeader = String.Empty;
private bool Ping(string url)
{
    try
    {
        bool status;
        HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
        req.Credentials = cred;
        req.AllowAutoRedirect = true;
        req.ContentType = "text/html";
        req.Accept = "*/*";
        req.KeepAlive = false;

        using (HttpWebResponse resp = (HttpWebResponse)req.GetResponse())
        {
            status = (resp.StatusCode.ToString() == "OK");
            WebHeaderCollection c = resp.Headers;
        }
        authorisationHeader = req.Headers.GetValues("Authorization")[0];
        return status;
    }
    catch
    {
        return false;
    }
}

public Bitmap GenerateScreenshot(string url, int width, int height)
{
    bool Active = Ping(url);
    if (Active)
    {
        // Load the webpage into a WebBrowser control
        wb.AllowNavigation = true;
        wb.AllowWebBrowserDrop = true;
        wb.Navigate(url, null, null, authorisationHeader);

        while (wb.ReadyState != WebBrowserReadyState.Complete)
        {
            Application.DoEvents();
        }
        //HANGS HERE IF THE SITE NEEDS AUTHENTICATION... Credentials aren't being passed through successfully. HELP!

        while (!isComplete)
        {
            Thread.Sleep(0);
        }
        wb.Dispose();
    }

    return bitmap;
}

如果有人可以帮助我自动登录需要身份验证的站点,那就太棒了!干杯。

【问题讨论】:

标签: c# winforms webbrowser-control windows-authentication ntlm


【解决方案1】:

这可能会回到关于传递凭据的 IE 设置(因为 Web 浏览器基本上是 IE 的一个实例)。所以我会将此站点添加到机器上的受信任站点,然后检查用户身份验证 - > 登录 - > 使用 IE 中的当前用户名和密码设置自动登录受信任站点。

【讨论】:

  • 谢谢。有时编写代码并不是解决问题的最佳方法——我必须记住这一点。
猜你喜欢
  • 2017-06-01
  • 2013-09-13
  • 2013-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-23
相关资源
最近更新 更多