0

我正在使用 Visual Studio 2010 和 .NET Framework 4.0。

代码:

public void LoginTo(string username, string password)
    {
        HttpWebRequest req = (HttpWebRequest)WebRequest.Create(this.Url + "login.php");
        string values =
            "username=" + username +
            "&password=" + password +
            "&redirect=" +
            "&autologin=on" +
            "&login=Log in";

        req.Method = "POST";
        req.ContentType = "application/x-www-form-urlencoded";
        req.ContentLength = values.Length;
        req.KeepAlive = true;
        req.UserAgent = "Mozilla/5.0 (Windows NT 5.1; rv:2.0) Gecko/20100101 Firefox/4.0";
        CookieContainer a = new CookieContainer();
        Uri uri = new Uri(this.Url);

        req.CookieContainer = a;

        ServicePointManager.Expect100Continue = false; // prevents 417 error

        using (StreamWriter writer = new StreamWriter(req.GetRequestStream(), System.Text.Encoding.Default))
        {
            writer.Write(values);
        }

        HttpWebResponse response = (HttpWebResponse)req.GetResponse();
        StreamReader reader = new StreamReader(response.GetResponseStream());

        formResponseWatcher formResponseWatcher = new formResponseWatcher();
        formResponseWatcher.SetResponseContent(reader.ReadToEnd());
        formResponseWatcher.Show();

        foreach (Cookie cookie in response.Cookies)
        {
            cookie.HttpOnly = true;
            Cookie = Cookie + cookie + ";";
        }
    }

问题是 CookieContainer 不包含所有 cookie。Firefox 中有 5 个 cookie,但 CookieContainer 只检索到 3 个。我需要始终登录所有 cookie。我认为像 .domain.com 这样的域存在问题。帮我!

4

1 回答 1

1

可能的情况:

  • 服务器只返回了 3 个 cookie。其他 cookie 要么在 JavaScript 代码中设置,要么由其他请求设置
  • set-cookie 标头格式错误,足以使 .Net 无法解析,但对于 Firefox 来说还可以(这是不可能的情况)。
  • 浏览器也有可能发送一些额外的信息(即引用标题),使服务器添加额外的 cookie。

请使用 Fiddler 或其他 HTTP 观察工具来查看服务器对浏览器和您的应用程序的响应。服务器很可能只返回 3 个 cookie。

于 2011-04-01T22:38:13.910 回答