0

我有一个经过 Windows 窗体身份验证的网页,当用户请求此页面时,我想将此页面的 HTML 副本下载到我的服务器中。我尝试过这样的事情

using (WebClient client = new WebClient())
        {
            string htmlCode = client.DownloadString("http://aksphases:200/lynliste.aspx");  
        }

这并没有给我正确的结果,因为我传递给系统的 URL 创建了新会话。在这种情况下,我需要验证这个 web 请求,我不能这样做。验证这个网页的唯一方法是那个用户手动登录(我知道通过代码验证任务的方法,但由于某些特殊原因我不能在这里尝试)。有没有其他方法可以让我下载在浏览器中运行的当前页面的 HTML,而无需验证 URL。

4

2 回答 2

3

您可以将当前表单身份验证 cookie 与请求一起发送:

using (WebClient client = new WebClient())
{
    client.Headers[HttpRequestHeader.Cookie] = 
        System.Web.HttpContext.Current.Request.Headers["Cookie"];
    string htmlCode = client.DownloadString("http://aksphases:200/lynliste.aspx");  
}

这样,我们基本上将当前的 HTTP 请求 cookie 传输到远程 HTTP 调用。

于 2013-01-28T09:10:16.047 回答
0

如果网络服务器不允许匿名访问,那么就没有办法了——您必须通过网站验证自己的身份。

但是,与您认为必须手动完成登录操作相反,它也可以通过代码完成。在 Windows 身份验证的情况下,通过Credentials属性传递凭据。对于表单身份验证,您需要将登录凭据发布到登录页面,然后在后续请求中使用响应中的身份验证 cookie(使用诸如提琴手之类的工具来检查来自浏览器的请求/响应以在您的代码中复制相同的内容)。

于 2013-01-28T09:11:03.660 回答