2013-09-06 2 views
1

Следующая функция написана на C# и используется для входа на сайт (с использованием метода POST и настройки файлов cookie).Бесконечный цикл в функции входа (CookieCollection)

Проблема в том, что если мой первый логин с неправильным именем пользователя или паролем, я не могу войти в систему снова, пока не запустил программу еще раз. Функция выполняется один раз, и если информация Логин неправильно, это заканчивается через несколько минут с этой ошибкой:

Stream newStream = getRequest.GetRequestStream(); // open connection 

WebException был необработанным код пользователя: таймауту

Я хотел бы попросить немного помочь выяснить, что не так. По-моему, ошибка может заключаться в использовании CookieCollection - я бы хотел удалить все существующие файлы cookie в случае неудачного входа в систему, но я не могу понять это. Я использую это решение:

private bool Login(string name, string password) 
    { 
     HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://.../login-page/"); 
     request.CookieContainer = new CookieContainer(); 
     request.CookieContainer.Add(cookies); 
     //Get the response from the server and save the cookies from the first request.. 
     HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 
     cookies = response.Cookies; 

     string sourceCode; 
     string getUrl = "http://.../login/"; 
     string postData = String.Format("username={0}&password={1}", name, password); 
     HttpWebRequest getRequest = (HttpWebRequest)WebRequest.Create(getUrl); 
     getRequest.CookieContainer = new CookieContainer(); 
     getRequest.CookieContainer.Add(cookies); //recover cookies First request 
     getRequest.Method = WebRequestMethods.Http.Post; 
     getRequest.UserAgent = "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.121 Safari/535.2"; 
     getRequest.AllowWriteStreamBuffering = true; 
     getRequest.ProtocolVersion = HttpVersion.Version11; 
     getRequest.AllowAutoRedirect = true; 
     getRequest.ContentType = "application/x-www-form-urlencoded"; 

     byte[] byteArray = Encoding.ASCII.GetBytes(postData); 
     getRequest.ContentLength = byteArray.Length; 
     Stream newStream = getRequest.GetRequestStream(); // open connection 
     newStream.Write(byteArray, 0, byteArray.Length); // Send the data. 
     newStream.Close(); 

     HttpWebResponse getResponse = (HttpWebResponse)getRequest.GetResponse(); 
     cookies = getResponse.Cookies; 
     using (StreamReader sr = new StreamReader(getResponse.GetResponseStream())) 
     { 
      sourceCode = sr.ReadToEnd(); 
     } 

     if (sourceCode.Contains("<div id='login'>Přihlášení se zdařilo</div>")) 
     { 
      return true; 
     } 
     return false; 
    } 

Код от: https://stackoverflow.com/a/8542205/2715725

Я действительно ценю любую помощь. Я не в C#, и у меня есть проблемы, чтобы скомпоновать этот код. Я пытался решить это в течение нескольких дней, но даже Google не помог мне, я искал solutin повсюду. Спасибо!

ответ

0

PROBLEM SOLVED

Я добавил это в моей функции:

request.KeepAlive = false; 
response.Close(); 
getRequest.KeepAlive = false; 
getResponse.Close(); 
0

Похоже, что ошибка скорее всего лежит на внешнем сайте, на котором вы публикуете имя пользователя и пароль. Вы уверены, что оно отображает это точное сообщение как при правильной аутентификации в первый раз, так и при проверке подлинности после неудачного входа в систему? Попробуйте оба действия непосредственно на этом сайте, чтобы узнать.

0

Добавить это в вашу функцию:

request.KeepAlive = false; 
response.Close(); 
getRequest.KeepAlive = false; 
getResponse.Close(); 
Смежные вопросы