2015-12-29 3 views
1

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

string formParams = 
string.Format("mail={0}&password={1}", [email protected]", "admin"); 
     string cookieHeader; 
     WebRequest req = WebRequest.Create("http://muslimgowns.com/dashboard/login/public_login"); 
      req.ContentType = "application/x-www-form-urlencoded"; 
      req.Method = "POST"; 
      byte[] bytes = Encoding.ASCII.GetBytes(formParams); 
      req.ContentLength = bytes.Length; 
      using (Stream os = req.GetRequestStream()) 
      { 
       os.Write(bytes, 0, bytes.Length); 
      } 
      WebResponse resp = req.GetResponse(); 
      cookieHeader = resp.Headers["Set-cookie"]; 
      using (StreamReader sr = new StreamReader(resp.GetResponseStream())) 
      { 
       string pageSource = sr.ReadToEnd(); 
       File.AppendAllText("first.txt", pageSource); 
      } 

      string pageSource1; 
      string getUrl = "http://muslimgowns.com/dashboard/home"; 
      WebRequest getRequest = WebRequest.Create(getUrl); 
      getRequest.Headers.Add("Cookie", cookieHeader); 
      WebResponse getResponse = getRequest.GetResponse(); 
      using (StreamReader sr = new StreamReader(getResponse.GetResponseStream())) 
      { 
       pageSource1 = sr.ReadToEnd(); 
       File.AppendAllText("second.txt", pageSource1); 
      } 
     } 
+0

Вы использовали, например, Fiddler или TamperData (Firefox), чтобы увидеть, какие запросы на самом деле отправляются на сервер до отображения домашней страницы? Вы можете посмотреть [это] (http://stackoverflow.com/questions/31585606/checking-if-website-is-working-and-login/31617770#31617770). – Streamline

ответ

1

Похоже, первые GET запрос на public_login возвращает количество печенья, и POST запрос с учетными данными впоследствии должны быть направлены в login_access вместо public_login

использование в HttpWebRequest вместо WebRequest и установив контейнер печенья из помогает, а на самом деле сервер отвечает HTTP 302 Redirect к POST запроса и HttpWebRequest автоматически следует за этим перенаправление и загрузка панели.

Всегда используйте инструмент отслеживания http, такой как Fiddler или Wireshark или Network Monitor, или инструменты разработчика вашего браузера, чтобы узнать, что получено (файлы cookie, заголовки и т. Д.) И что отправлено обратно. Вот как я получил все это.

Вот исправление:

string formParams = string.Format("mail={0}&password={1}", "[email protected]", "admin"); 

CookieContainer cookieContainer = new CookieContainer(); 

HttpWebRequest req = WebRequest.CreateHttp("http://muslimgowns.com/dashboard/login/public_login"); 
req.CookieContainer = cookieContainer; 
req.GetResponse(); // This is just to get the initial cookies returned by the public_login 

req = WebRequest.CreateHttp("http://muslimgowns.com/dashboard/login/login_access"); 
req.CookieContainer = cookieContainer; // Set the cookie container which contains the cookies returned by the public_login 

req.ContentType = "application/x-www-form-urlencoded"; 
req.Method = "POST"; 

byte[] bytes = Encoding.ASCII.GetBytes(formParams); 
req.ContentLength = bytes.Length; 

using (Stream os = req.GetRequestStream()) 
{ 
    os.Write(bytes, 0, bytes.Length); 
} 

WebResponse resp = req.GetResponse(); 

using (StreamReader sr = new StreamReader(resp.GetResponseStream())) 
{ 
    string pageSource = sr.ReadToEnd(); 
    File.AppendAllText("first.txt", pageSource); // Dashboard is returned. 
} 
+0

это отличный ответ Oguz Ozgul –

+0

Спасибо :) Важная часть этого ответа не является исправлением для этого конкретного случая. Я думаю, что самая важная часть - это рекомендация использовать Http Analyzer для просмотра запрошенных ресурсов и деталей запроса/ответа, которые помогут вам в дальнейшей разработке. –

+0

да, я пытаюсь использовать Http Analyzer. Я новичок в этом и сталкиваюсь с некоторыми проблемами. Можете ли вы, пожалуйста, направить меня, как я могу войти на сайт fastundercar.com. Следуя URL-адресам, я пытаюсь. Чтобы войти в систему: http://www.fastundercar.com/ThemeLanding/Default28.aspx и после входа в систему: http://www.fastundercar.com/SiteManagement/UISettings/DisplayHtml.aspx Также есть способ передать скрытые поля вдоль с информацией о пользователе и пароле. Если да, то какой будет синтаксис. заблаговременно –

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