Я создал утилиту захвата веб-страниц, которая запускается через 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;
}
Если кто-нибудь может помочь мне автоматически войти на сайт, требующий аутентификации, это было бы удивительно! Приветствия.