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

C# 在不创建新会话的情况下下载当前页面HTML,c#,asp.net,httpwebrequest,forms-authentication,C#,Asp.net,Httpwebrequest,Forms Authentication,我有一个经过windows窗体验证的网页,当用户请求此网页时,我想将此网页的HTML副本下载到我的服务器中。我试过这样的东西 using (WebClient client = new WebClient()) { string htmlCode = client.DownloadString("http://aksphases:200/lynliste.aspx"); } 这不会给我正确的结果,因为我传递给系统的URL会创建新会话。

我有一个经过windows窗体验证的网页,当用户请求此网页时,我想将此网页的HTML副本下载到我的服务器中。我试过这样的东西

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

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

您可以将当前表单验证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调用。

您可以将当前表单验证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调用。

如果web服务器不允许匿名访问,那么就没有办法了-您必须通过web站点进行身份验证


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

如果web服务器不允许匿名访问,那么就没有办法了-您必须通过网站进行身份验证


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

…但需要注意的是,这会将用户的所有cookie传递给第三方服务器,这可能反映了一个严重的安全漏洞……需要注意的是,这会将用户的所有cookie传递给第三方服务器,这可能反映了一个严重的安全漏洞。。。