Я пробовал много примеров как здесь, так и из Google и по-прежнему не могу получить мой логин. Я отлаживал и видел, что он отправляет перенаправление 302, и мой логин успешно завершен. Я верю. Затем отправлю его на следующую страницу, но сохраняем файлы cookie, полученные из ответа на вход. Но я все еще вышла из системы. Вот мой код, кроме URL-адресов и информации для входа. Я проверил параметры POST. Сначала я запрашиваю файл cookie сеанса, затем войдите в систему, затем перейдите на страницу переадресации. Вся помощь по достоинству оценена, это огромная головная боль.C# сохранение файлов cookie и сеансов на веб-страницах
HttpWebRequest GetRequest(string Site, CookieContainer Cookies, string SendType)
{
HttpWebRequest request = WebRequest.Create(Site) as HttpWebRequest;
request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.134 Safari/537.36";
request.CookieContainer = Cookies; // Assign it some cookies
request.ContentType = "application/x-www-form-urlencoded";
request.Method = SendType;
return request;
}
private string GetLoggedInPage(string username, string password, string loginPage, string redirectPage)
{
string formParams = string.Format("login={0}&password={1}", username, password);
// cookies to use for multiple requests
var cookies = new CookieContainer(); // Create cookies!
var request= GetRequest(loginPage, cookies, "POST");
//Send params off
byte[] bytes = Encoding.ASCII.GetBytes(formParams);
using (Stream loginStream = request.GetRequestStream())
{
loginStream.Write(bytes, 0, bytes.Length);
}
request.GetResponse().Dispose(); // removed some code here, no need to read response manually
request= GetRequest(redirectPage, cookies, "GET");
using (WebResponse getResponse = request.GetResponse())
{
using (StreamReader sr = new StreamReader(getResponse.GetResponseStream()))
{
var result = sr.ReadToEnd();//Read logged in webpage
return Convert.ToString(result);
}
}
return "<Html></html>"; //Return blank page in case the using above didn't work correctly.
}
Приведенный ниже код реорганизуется и работает. Я последовал совету KoBE ниже, но он все еще не работал. Вопрос оказался ориентированным на структуру 4.5.2. Я нацелен на работу 4.0 и ниже. просто отправьте GetLoggedInPage свое имя пользователя, пароль и URL-адрес для входа и адрес URL, и он вернет вам строку. Я собираюсь превратить это в класс и использовать его.
Не забывайте сохранять файлы cookie!
void WriteParams(string Params, HttpWebRequest webrequestStream)
{
byte[] bytes = Encoding.ASCII.GetBytes(Params);
using (Stream requestStream = webrequestStream.GetRequestStream())
{
requestStream.Write(bytes, 0, bytes.Length);
}
}
HttpWebRequest GetRequest(string Site, ref CookieContainer Cookies, string SendType)
{
HttpWebRequest request = WebRequest.Create(Site) as HttpWebRequest;
request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.134 Safari/537.36";
request.CookieContainer = Cookies; // Assign it some cookies
request.ContentType = "application/x-www-form-urlencoded";
request.Method = SendType;
return request;
}
private string GetLoggedInPage(string username, string password, string loginPage, string redirectPage)
{
string formParams = string.Format("login={0}&password={1}", username, password);
// cookies to use for multiple requests
var cookies = new CookieContainer(); // Create cookies!
HttpWebRequest request= GetRequest(loginPage, ref cookies, "POST");
//Send params off
WriteParams(formParams, request);
request.GetResponse();// .Dispose(); // removed some code here, no need to read response manually
request= GetRequest(redirectPage, ref cookies, "GET");
using (WebResponse getResponse = request.GetResponse())
{
using (StreamReader sr = new StreamReader(getResponse.GetResponseStream()))
{
var result = sr.ReadToEnd();//Read logged in webpage
return Convert.ToString(result);
}
}
return "<Html></html>"; //Return blank page in case the using above didn't work correctly.
}
Я применил свои исправления, но я все еще получаю не вошли в экран. Что касается нескольких раз, я прочитал, что сначала вы должны отправить GET с учетными данными, чтобы получить файл cookie сеанса и добавить его. Я взял этот код и обновил его. Он идет со страницы входа на эту страницу. Нужно ли мне обрабатывать перенаправление? – NeedHelp
Кажется, вам не хватает пользовательского агента. Также выньте это для цикла. Вам это больше не нужно. Я привел рабочий пример выше. – Cory
Это все еще немного неудобно и может использовать какой-то рефакторинг, но я чувствовал, что это выходит за рамки вашего вопроса. – Cory