HttpWebRequest发送1个cookie而不是2个

时间:2011-05-01 12:54:41

标签: c# cookies httpwebrequest

我的程序应该登录到某个站点。要登录,您应该向主页面发出请求并获取cookie,然后您应该登录(http://site.com/auth/login)。当我向主页面发出请求并获取cookie时,一切正常,cookie容器中有两个cookie,但是当我登录时,只有一个cookie。这是代码:

    public CookieContainer GetCookies()
    {
        HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create("http://site.com/");
        httpWebRequest.CookieContainer = new CookieContainer();
        httpWebRequest.Accept = "*/*";
        httpWebRequest.Headers.Add(HttpRequestHeader.AcceptLanguage, "ru");
        httpWebRequest.UserAgent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/4.0; WebMoney Advisor; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Tablet PC 2.0; .NET4.0C; .NET CLR 1.1.4322; .NET4.0E; MALC)";
        httpWebRequest.Headers.Add(HttpRequestHeader.AcceptEncoding, "gzip, deflate");
        httpWebRequest.Timeout = 30000;
        CookieContainer cookieContainer = new CookieContainer();
        HttpWebResponse response = (HttpWebResponse)httpWebRequest.GetResponse();
        foreach (Cookie c in response.Cookies)
        {
            cookieContainer.Add(c);
        }
        return cookieContainer;
    }
    public bool Login(string Email, string Password, CookieContainer Cookies)
    {
        string s = "handle=" + Email + "&password=" + Password;
        byte[] bytes = Encoding.ASCII.GetBytes(s);
        HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create("http://site.com/auth/login");
        httpWebRequest.Method = "POST";
        httpWebRequest.Accept = "image/jpeg, application/x-ms-application, image/gif, application/xaml+xml, image/pjpeg, application/x-ms-xbap, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*";
        httpWebRequest.Referer = "http://www.lockerz.com/";
        httpWebRequest.Headers.Add(HttpRequestHeader.AcceptLanguage, "ru-RU");
        httpWebRequest.UserAgent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/4.0; WebMoney Advisor; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Tablet PC 2.0; .NET4.0C; .NET CLR 1.1.4322; .NET4.0E; MALC)";
        httpWebRequest.ContentType = "application/x-www-form-urlencoded";
        httpWebRequest.CookieContainer = Cookies;
        httpWebRequest.ContentLength = (long)bytes.Length;
        httpWebRequest.Headers.Add(HttpRequestHeader.Pragma, "no-cache");
        httpWebRequest.Timeout = 30000;
        httpWebRequest.AutomaticDecompression = DecompressionMethods.GZip;
        Stream requestStream = httpWebRequest.GetRequestStream();
        requestStream.Write(bytes, 0, bytes.Length);
        requestStream.Close();
        HttpWebResponse httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse();
        StreamReader reader = new StreamReader(httpWebResponse.GetResponseStream());
        string document = reader.ReadToEnd().Trim();
        if (document.IndexOf("Sign Out") > 1)
        {
            httpWebResponse.Close();
            return true;
        }
        else
        {
            httpWebResponse.Close();
            return false;
        }
    }

怎么了? 提前谢谢。

1 个答案:

答案 0 :(得分:2)

在httpWebRequest对象中有一个CookieCollection。如果您深入了解变量,您会发现其中一个cookie设置为与您在URI中发送的域不同的域。您需要通过修改域来匹配URI来操纵此cookie。

希望能解决它。