0

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

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

我正在获取 System.Net.Cookies 进行身份验证,我尝试将它们复制到 System.Web.HttpCookies 并将它们添加到 Response 对象中。如果我在页面上放置一个链接或使用 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");
4

2 回答 2

3

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

于 2008-12-02T23:46:38.177 回答
0

我认为浏览器可能会忽略响应标头中的 cookie,因为即将发生 Response.Redirect。我们最近遇到了这个问题,发现 FF 接受了 cookie,但 IE6&7 没有。

不过,我不确定我是否完全理解您要执行的操作。您是否尝试将站点 A 的 cookie 发送到实际上用于站点 B 的浏览器?

于 2008-12-02T23:31:20.173 回答