Следующая функция написана на 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 повсюду. Спасибо!