.net 如何将Cookie传递到外部web浏览器?

.net 如何将Cookie传递到外部web浏览器?,.net,screen-scraping,.net,Screen Scraping,我正在编写一个应用程序,它将需要打开浏览器窗口(可能会坚持IE)来访问使用表单身份验证的网站。诀窍在于,它们需要已经过身份验证,以节省时间,因为我们需要进入的站点数量之多。(最终,我将对它们进行屏幕抓取并处理数据……但我仍然需要让验证工作正常进行,以便它们可以在需要时点击到真实的站点。) 我已经完成了表单身份验证工作,因为我可以使用HttpWebRequest来获取html并将其传递给浏览器。但是,我无法让它将cookies传输到客户端浏览器,以便它可以访问实际的网站 我正在获取用于身份验证的S

我正在编写一个应用程序,它将需要打开浏览器窗口(可能会坚持IE)来访问使用表单身份验证的网站。诀窍在于,它们需要已经过身份验证,以节省时间,因为我们需要进入的站点数量之多。(最终,我将对它们进行屏幕抓取并处理数据……但我仍然需要让验证工作正常进行,以便它们可以在需要时点击到真实的站点。)

我已经完成了表单身份验证工作,因为我可以使用HttpWebRequest来获取html并将其传递给浏览器。但是,我无法让它将cookies传输到客户端浏览器,以便它可以访问实际的网站

我正在获取用于身份验证的System.Net.Cookies,并尝试将它们复制到System.Web.HttpCookies中,然后将它们添加到响应对象中。如果我在页面上放置了一个链接或使用Response.Redirect转到该网站,则该链接不起作用,就好像用户未经身份验证一样

有人知道我该怎么办吗

以下是当前代码,以便更清楚地说明这一点:

Dictionary<string, string> formValues = new Dictionary<string, string>(4);
        formValues.Add("txbUserName", "USERNAME");
        formValues.Add("txbPassword", "PASSWORD");
        formValues.Add("SubmitB", "Log In");

        HttpWebRequest webRequest;
        StreamReader responseReader;
        string responseData;

        //This authenticates an HttpWebRequest and returns it
        webRequest = FormsAuthHttpWebRequest.Create("REQUESTURI", "LOGINURI", 
                                                    formValues) as HttpWebRequest;

        responseReader = new StreamReader(webRequest.GetResponse().GetResponseStream());

        responseData = responseReader.ReadToEnd();
        responseReader.Close();

        foreach (Cookie cookie in webRequest.CookieContainer.GetCookies(new Uri("SITEURI")))
        {
            HttpCookie httpCookie = new HttpCookie(cookie.Name, cookie.Value)
            {
                Domain = cookie.Domain,
                Expires = cookie.Expires,
                Path = cookie.Path,
                HttpOnly = cookie.HttpOnly,
                Secure = cookie.Secure                 
            };

            Response.Cookies.Add(httpCookie);
        }


        Response.Redirect("REQUESTURI");
Dictionary formValues=新字典(4);
formValues.Add(“TXB用户名”、“用户名”);
formValues.Add(“txbPassword”、“PASSWORD”);
formValues.Add(“提交”、“登录”);
HttpWebRequest-webRequest;
StreamReader-responseReader;
字符串响应数据;
//这将验证HttpWebRequest并返回它
webRequest=formsauthttpwebrequest.Create(“REQUESTURI”、“LOGINURI”,
formValues)作为HttpWebRequest;
responseReader=newstreamreader(webRequest.GetResponse().GetResponseStream());
responseData=responseReader.ReadToEnd();
responseReader.Close();
foreach(webRequest.CookieContainer.GetCookies中的Cookie(新Uri(“SITEURI”))
{
HttpCookie HttpCookie=新的HttpCookie(cookie.Name,cookie.Value)
{
Domain=cookie.Domain,
Expires=cookie.Expires,
Path=cookie.Path,
HttpOnly=cookie.HttpOnly,
安全=cookie.Secure
};
Response.Cookies.Add(httpCookie);
}
重定向(“请求URI”);

我认为浏览器可能会因为即将到来的response.Redirect而忽略响应标题中的cookie。我们最近遇到了这个问题,发现FF接受了cookies,但IE6和IE7没有


不过,我不确定我到底明白你想做什么。您是否试图将cookies从站点A发送到浏览器,而浏览器实际上是为站点B准备的

我认为浏览器可能会因为即将到来的response.Redirect而忽略响应头中的cookie。我们最近遇到了这个问题,发现FF接受了cookies,但IE6和IE7没有


不过,我不确定我到底明白你想做什么。您是否试图将cookies从站点A发送到浏览器,而浏览器实际上是为站点B准备的

我认为你做不到这一点。浏览器将忽略来自不属于与Cookie关联的域的web服务器的任何“添加Cookie”头。这是Cookie内置安全性的一部分-如果其他网站可以为另一个域读取或写入Cookie,这将是灾难性的(从安全和隐私角度来看)。

我认为你无法做到这一点。浏览器将忽略来自不属于与Cookie关联的域的web服务器的任何“添加Cookie”头。这是cookies内置安全性的一部分-如果其他网站可以读取或写入另一个域的cookies,这将是灾难性的(从安全和隐私角度来看)。

不仅仅是重定向,我还尝试在页面上添加链接,得到了同样的结果。基本上,第一个版本将为多个网站打开浏览器,浏览器已经通过身份验证。不仅仅是重定向,我还尝试在页面上添加链接,得到了相同的结果。基本上,第一个版本将为多个网站打开浏览器,并且浏览器已经过身份验证。