Reputation: 912
My program is supposed to log in to a site. To log in there you should make a request to the main page and get cookies, then you should login (http://site.com/auth/login). When I make a request to the main page and get the cookies, everything is OK, there are two cookies in the cookie container, but when I log in, there's only one cookie. Here goes the code:
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;
}
}
What's wrong? Thanks in advance.
Upvotes: 1
Views: 1890
Reputation: 22984
In the httpWebRequest object theres a CookieCollection. If you dig into the variables you will find that one of the cookies is set to a different different domain than the one you're sending in your URI. You will need to manipulate this cookie by modifying the domain to match the URI.
Hope that solves it.
Upvotes: 2