2015-06-21 6 views
0

Я пытаюсь войти на сайт. Это нужно сделать с помощью запроса POST. Но мне нужно как-то хранить файл cookie.Как сохранить cookie после входа в систему

Мой реальный код:

public void botLogin(string userName, string passWord) 
    { 
     ASCIIEncoding encoding = new ASCIIEncoding(); 
     string post_data = "username=" + userName + "&password=" + passWord; 
     byte[] data = encoding.GetBytes(post_data); 

     var requestUri = "http://registration.zwinky.com/registration/loginAjax.jhtml"; 
     HttpWebRequest request = (HttpWebRequest)WebRequest.Create(requestUri); 
     request.Method = "POST"; 
     request.ContentType = "application/x-www-form-urlencoded"; 
     request.ContentLength = data.Length; 

     var sharedCookies = new CookieContainer(); 
     request.CookieContainer = sharedCookies; 

     Stream stream = request.GetRequestStream(); 
     stream.Write(data, 0, data.Length); 
     stream.Close(); 

     WebResponse response = request.GetResponse(); 
     stream = response.GetResponseStream(); 

     StreamReader sr = new StreamReader(stream); 
     MessageBox.Show(sr.ReadToEnd()); 

     sr.Close(); 
     stream.Close(); 
    } 

Как бы я хранить печенье теперь использовать его для других запросов?

ответ

1

Прежде всего, создайте созданный WebRequest для HttpWebRequest. Это даст вам доступ к более специфичным для HTTP свойствам и методам.

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(requestUri); 

Определить объект CookieContainer на уровне приложения и установить его для каждого созданного запроса.

request.CookieContainer = sharedCookies; 

Я довольно уверен, объект HttpWebRequest будет хранить куки после загрузки, так что следующий запрос может использовать их. Если это все еще не работает, проверьте объект HttpWebResponse для файлов cookie (опять же, не забудьте указать объект ответа на него).

+0

Теперь функция обновляется в верхнем коде. Как я могу назвать этот файл cookie другими методами? – questiionxx

+0

Как упоминалось christoph, процедура botlogin должна использовать переменную класса для контейнера cookie (или вернуть ее в параметр out). Вы также можете определить HttpWebRequest как переменную класса и использовать его для последующих запросов. --- Предупреждение: обратите внимание на возможные автоматические перенаправления, которые не сохраняют файлы cookie, предоставляемые перенаправленным URL. – Graffito

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