2012-04-08 2 views
3

Я только начал играть с C# несколько недель назад. У меня есть задача, которую я пытаюсь выполнить, и не уверен, что способ, которым я это делаю сейчас, - это правильный подход.Попытка войти на сайт, нажав кнопку (Httpwebrequest - cookies)

Я пытаюсь войти на сайт (в моем случае WordPress website- для озера лучших вариантов) и навигации в панели администратора с помощью C#

До сих пор, что я сделал было создать новый проект - Windows Форма заявки.

Следующий код - отправить запрос на веб-сайт с паролем/именем пользователя и другими параметрами, как POST

private void button2_Click(object sender, EventArgs e) 
{ 
    CookieContainer cookieJar = new CookieContainer(); 
    CookieContainer cookieJar2 = new CookieContainer(); // will use this later 
    string testaa = ""; // will use this later 
    string paramaters = "log=xxxx&pwd=xxxx&testcookie=1&redirect_to=http://www.example.com/wp-admin/&wp-submit=Log In"; 
    string strResponse; 
    HttpWebRequest requestLogin = (HttpWebRequest)WebRequest.Create("http://www.lyndatobin-howes.com/wp-login.php"); 
    requestLogin.Method = "POST"; 
    requestLogin.AllowAutoRedirect = false; 
    requestLogin.ContentType = "application/x-www-form-urlencoded"; 
    requestLogin.CookieContainer = cookieJar; 
    requestLogin.ContentLength = paramaters.Length; 
    StreamWriter stOut = new StreamWriter(requestLogin.GetRequestStream(), Encoding.ASCII); 
    stOut.Write(paramaters); 
    stOut.Close(); 
} 

то у меня есть этот код, чтобы взять печенье ответа.

HttpWebResponse response = (HttpWebResponse)requestLogin.GetResponse(); 
foreach (Cookie c in response.Cookies) 
{ 
    cookieJar2.Add(new Cookie(c.Name, c.Value, c.Path, c.Domain)); 
} 

, то у меня есть это, чтобы прочитать ответ + закрыть некоторые потоки.

StreamReader stIn = new StreamReader(requestLogin.GetResponse().GetResponseStream()); 
strResponse = stIn.ReadToEnd(); 
string responseFromServer = stIn.ReadToEnd(); 
webBrowser1.DocumentText = responseFromServer; 
stIn.Close(); 
response.Close(); 

И тогда я попробовать использовать вышеупомянутые печенья для страницы я пытаюсь получить доступ следующим образом:

HttpWebRequest requestLogin2 = (HttpWebRequest)WebRequest.Create("http://www.example.com/wp-admin/"); 
requestLogin2.Method = "POST"; 
requestLogin2.AllowAutoRedirect = false; 
requestLogin2.ContentType = "application/x-www-form-urlencoded"; 
requestLogin2.CookieContainer = cookieJar2; 
requestLogin2.ContentLength = paramaters.Length; 
StreamWriter stOut2 = new StreamWriter(requestLogin2.GetRequestStream(), System.Text.Encoding.ASCII); 
stOut2.Write(paramaters); 
stOut2.Close(); 

StreamReader stIn2 = new StreamReader(requestLogin2.GetResponse().GetResponseStream()); 
strResponse = stIn2.ReadToEnd(); 
string responseFromServer2 = stIn2.ReadToEnd(); 
webBrowser1.DocumentText = responseFromServer2; 
richTextBox2.Text += "\n\n\n" + responseFromServer2; 
stIn.Close(); 

Ну это не работает по какой-то причине я пытался это для неделю.

Я попытался отобразить заголовок - после первого запроса посмотреть, какие заголовки я верну. а затем посмотрел на печенье, которое я построил (cookieJar2), и похоже, что они не то же самое.

В любом случае любая помощь по этому вопросу была бы удивительной и высоко оцененной. Я попытался дать как можно больше деталей.

ответ

1

Использование Fiddler и/или Wireshark и сравните запросы преуспевающих (сделанные с некоторым браузером) и неисправные запросы ... затем имитировать преуспевающие запросы в коде путем удаления/добавлении любой необходимости, очень часто Cookies являются одним из " виновниками»в таких ситуациях - иногда это специфический реферер или подобное ...

Некоторые сайты используют защитные меры Побейте автоматизированных логины ...

Кроме того, часть кодирования: проверить, является ли автоматически войти таким образом запрещено по их условиям/условиям!

+0

Итак, я использую fibbler, элемент проверки google chrome и еще один инструмент для FF, все они показывают примерно одно и то же - это не проблема, я знаю, какие файлы cookie мне нужны, , о запрете или нет - я делаю эти тесты на своем собственном сайте Wordpress, который я установил специально, чтобы проверить, как работают лог-файлы - у меня не было другого веб-сайта для тестирования, поэтому для легитимности - я закрыт. –

+0

@YanivKossas ЕСЛИ нет никакой разницы между http-связью через браузер и кодом C#. Тогда у вас не возникнет никаких проблем! Таким образом, должна быть разница ... другой момент, как я уже писал: некоторые сайты защищают себя от автоматических логинов - проверяют их условия/условия и, возможно, настройки! – Yahia

+0

@ YanivKossas еще довольно странно использовать 'HttpWebRequest' и' WebBrowser' вместе - по какой-то причине, почему вы так пытаетесь? – Yahia

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