WebBrowser.Navigate ();Как передать учетные данные NTLM - PullRequest
2 голосов
/ 17 февраля 2011

Я создал утилиту захвата веб-страниц, которая запускается через 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;
}

Если кто-нибудь может помочь мне автоматически войти на сайт, требующий аутентификации, это было бы удивительно! Приветствия.

1 Ответ

3 голосов
/ 17 февраля 2011

Это, вероятно, возвращается к настройке IE о передаче учетных данных (потому что веб-браузер в основном является экземпляром IE). Поэтому я хотел бы добавить этот сайт к доверенному сайту на компьютере и затем проверить проверку подлинности пользователя -> Вход в систему -> Автоматический вход с текущим именем пользователя и паролем в IE для доверенных сайтов.

...