【发布时间】: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;
}
如果有人可以帮助我自动登录需要身份验证的站点,那就太棒了!干杯。
【问题讨论】:
-
[Send credentials to WebBrowser](stackoverflow.com/questions/2445963/…)的可能副本
标签: c# winforms webbrowser-control windows-authentication ntlm