2012-11-04 3 views
1

После моего вопроса Can't login with HttpWebRequests, я успешно вошел. Я получаю страницу, на которой он говорит «Спасибо, что вошли в систему» ​​, но после этого я, кажется, не вошел в систему.Cookies, кажется, не используются в HttpWebRequest

Для меня это похоже на проблему с печеньем. В firebug печенье, казалось, HttpOnly могло быть проблемой? Как я могу использовать файлы cookie HttpWebRequest?

Вот код, я использую для входа:

string url = "http://www.warriorforum.com/login.php?do=login"; 

var bytes = Encoding.Default.GetBytes(@"vb_login_username=USERNAME&cookieuser=1&vb_login_password=&s=&securitytoken=guest&do=login&vb_login_md5password=d9350bad28eee253951d7c5211e50179&vb_login_md5password_utf=d9350bad28eee253951d7c5211e50179"); 
var container = new CookieContainer(); 

var request = (HttpWebRequest)(WebRequest.Create(url)); 
request.CookieContainer = container; 
request.UserAgent = "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; InfoPath.3)"; 
request.ContentLength = bytes.Length; 
request.Method = "POST"; 
request.ContentType = "application/x-www-form-urlencoded"; 
request.KeepAlive = true; 
request.AllowAutoRedirect = true; 
request.AllowWriteStreamBuffering = true; 
request.CookieContainer = container; 
using (var requestStream = request.GetRequestStream()) 
    requestStream.Write(bytes, 0, bytes.Length); 

var requestResponse = request.GetResponse(); 
using (var responsStream = requestResponse.GetResponseStream()) 
    if (responsStream != null) 
    { 
     using (var responseReader = new StreamReader(responsStream)) 
     { 
      var responseStreamReader = responseReader.ReadToEnd(); 
      richTextBox1.Text = responseStreamReader; //this is to read the page source after the request 
     } 
    } 
} 

ответ

2

страница Неавтоматическая HttpWebRequest.CookieContainer «s говорит:

Свойство CookieContainer предоставляет экземпляр класса CookieContainer, который содержит куки, связанные с этим запрос.

Вы делаете:

var container = new CookieContainer(); 

Так что на каждом запросе, вы начинаете с новой CookieContainer без печенья. Сделайте container членом класса и создайте его только один раз.

+0

ОН МОЙ БОГ СПАСИБО ВАМ ТАК СКОРО, какая глупая ошибка, с которой я боролся в течение часа –

Смежные вопросы