2015-06-11 5 views
0

Я пытаюсь войти на сайт через webrequest, но webresponse возвращает тот же html страницы входа.C# - попытка входа в систему с помощью webrequest, но webresponse возвращает тот же html

CookieContainer cookies = new CookieContainer(); 
String postData = "vb_login_username=myusername&vb_login_password=mypassword"; 
byte[] send = Encoding.Default.GetBytes(postData); 
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("domain url here")); 
     request.CookieContainer = cookies; 
     request.ContentType = "application/x-www-form-urlencoded"; 
     request.Method = "POST"; 
     request.Timeout = 30000; 
     request.ContentLength = send.Length; 
     Stream stream = request.GetRequestStream(); 
     stream.Write(send, 0, send.Length); 
     stream.Flush(); 
     stream.Close(); 


    HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 
      foreach (Cookie cook in response.Cookies) 
      { 
       cookies.Add(cook); 
       Console.WriteLine(cook.Name+ cook.Value+ cook.Path+ cook.Domain); 
      } 
      StreamReader reader = new StreamReader(response.GetResponseStream()); 
      String result = reader.ReadToEnd(); 
      Console.WriteLine(result); 
+0

Трудно ответить без фактического примера. Попробуйте 'Encoding.UTF8' вместо' Encoding.Default'. –

ответ

0

В то время как в большинстве случаев HTML, возвращаемых в запросе может быть легко использована в качестве индикатора удалось ли вам войти в систему или нет, вы не должны полагаться на него как верный метод 100% - я помню один конкретный веб-сайт, который в отношении запросов, не связанных с браузером HTTP, возвращал в значительной степени тот же HTML для стандартного запроса GET и для запроса журнала POST. Вместо этого, после отправки POST, отправьте дополнительный запрос GET на одну из страниц, которые будут обычно доступны только после входа в систему. Если полученный ответ указывает, что вам удалось достичь этого (а не на странице с ошибкой или переадресации), вы знаете, что вы вошли в систему.

Как правило, очень сложно, если не невозможно, помочь вам, не зная, на каком веб-сайте вы хотите войти, поскольку процесс варьируется между ними. Может быть, необходимо начать со стандартного запроса GET для получения первых файлов cookie? Может быть, какая-то дополнительная информация необходима для включения в заголовки? Может быть, у вас есть опечатка где-то в вашем материале POST? Это может быть много разных причин.

+0

@ Сидхарт Джейн См. Ответ Ивана, он углубился в подробности, чем я. –

1

К сожалению, с этим сайтом все не так просто. На первый взгляд на <form> тег:

<form onsubmit="md5hash(vb_login_password, vb_login_md5password, vb_login_md5password_utf, 0)" method="post" action="login.php?do=login" id="navbar_loginform"> 

Перед представить это вызывает md5hash функцию, чтобы сделать хэш пароля. Затем в данных POST после попытки входа в систему вы можете увидеть параметры vb_login_md5password и vb_login_md5password_utf, но простой vb_login_password пуст.

+1

.NET имеет встроенное хеширование MD5 в пространстве имен System.Security.Cryptography, поэтому я полагаю, что с инструментами веб-разработчиков Fiddler или Chrome и некоторыми пробными версиями и ошибками можно было бы правильно реплицировать хэш, отправляемый, если не создан хэш в некотором творческом ключе. –

+0

@S_F, точно, я согласен с вами. –

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

  • Нет связанных вопросов^_^