Я только начал играть с 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), и похоже, что они не то же самое.
В любом случае любая помощь по этому вопросу была бы удивительной и высоко оцененной. Я попытался дать как можно больше деталей.
Итак, я использую fibbler, элемент проверки google chrome и еще один инструмент для FF, все они показывают примерно одно и то же - это не проблема, я знаю, какие файлы cookie мне нужны, , о запрете или нет - я делаю эти тесты на своем собственном сайте Wordpress, который я установил специально, чтобы проверить, как работают лог-файлы - у меня не было другого веб-сайта для тестирования, поэтому для легитимности - я закрыт. –
@YanivKossas ЕСЛИ нет никакой разницы между http-связью через браузер и кодом C#. Тогда у вас не возникнет никаких проблем! Таким образом, должна быть разница ... другой момент, как я уже писал: некоторые сайты защищают себя от автоматических логинов - проверяют их условия/условия и, возможно, настройки! – Yahia
@ YanivKossas еще довольно странно использовать 'HttpWebRequest' и' WebBrowser' вместе - по какой-то причине, почему вы так пытаетесь? – Yahia