在不创建新会话的情况下下载当前页面HTML

时间:2013-01-28 09:05:30

标签: c# asp.net httpwebrequest forms-authentication

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

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

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

2 个答案:

答案 0 :(得分: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调用。

答案 1 :(得分:0)

如果Web服务器不允许匿名访问,则无法解决 - 您必须使用该网站对自己进行身份验证。

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

相关问题