我的程序应该登录到某个站点。要登录,您应该向主页面发出请求并获取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;
}
}
怎么了? 提前谢谢。
答案 0 :(得分:2)
在httpWebRequest对象中有一个CookieCollection。如果您深入了解变量,您会发现其中一个cookie设置为与您在URI中发送的域不同的域。您需要通过修改域来匹配URI来操纵此cookie。
希望能解决它。