HttpWebRequest, c # и Https - PullRequest
       25

HttpWebRequest, c # и Https

0 голосов
/ 27 ноября 2011

Я пробовал много способов войти на сайт https программно, но у меня проблемы.Каждый раз, когда я получаю сообщение о том, что мой логин и пароль неверны.Я уверен, что они верны, потому что я могу войти на сайт через браузер, используя те же учетные данные.

Код ошибки

HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create("https://www.majesticseo.com/account/login?EmailAddress=myemail&Password=mypass&RememberMe=1");
request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:8.0) Gecko/20100101 Firefox/8.0";
request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,**;q=0.8";
request.UnsafeAuthenticatedConnectionSharing = true;
request.Method = "POST";
request.KeepAlive = true;
request.ContentType = "application/x-www-form-urlencoded";
request.AllowAutoRedirect = true;
request.CookieContainer = container;

HttpWebResponse response = (HttpWebResponse)request.GetResponse();

//String tmp;
foreach(Cookie cookie1 in response.Cookies)
{
    container.Add(cookie1);
}

Stream stream = response.GetResponseStream();

string html = new StreamReader(stream).ReadToEnd();
Console.WriteLine("" + html);

Ответы [ 2 ]

1 голос
/ 27 ноября 2011

Этот сайт использует HTTP POST для входа в систему и не отправляет имя пользователя и пароль в URL.

Правильный URL-адрес входа: https://www.majesticseo.com/account/login

Вам необходимо создать строкуданные для публикации, преобразовать их в байтовый массив, установить длину содержимого и затем выполнить ваш запрос.Очень важно, чтобы длина контента отправлялась.Без этого пост не будет работать.

        HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create("https://www.majesticseo.com/account/login?EmailAddress=myemail&Password=mypass&RememberMe=1");

        request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:8.0) Gecko/20100101 Firefox/8.0";
        request.Referer = "https://www.majesticseo.com/account/login";
        request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,**;q=0.8";
        request.UnsafeAuthenticatedConnectionSharing = true;
        request.Method = "POST";
        request.KeepAlive = true;
        request.ContentType = "application/x-www-form-urlencoded";
        request.AllowAutoRedirect = true;

        // the post string for login form
        string postData = "redirect=&EmailAddress=EMAIL&Password=PASS";
        byte[] postBytes = System.Text.Encoding.ASCII.GetBytes(postData);

        request.ContentLength = postBytes.Length;

        System.IO.Stream str = request.GetRequestStream();

        str.Write(postBytes, 0, postBytes.Length);

        str.Close();

        HttpWebResponse response = (HttpWebResponse)request.GetResponse();

        System.IO.Stream stream = response.GetResponseStream();


        string html = new System.IO.StreamReader(stream).ReadToEnd();

        Console.WriteLine("" + html);
0 голосов
/ 27 ноября 2011

Вы пытаетесь что-то опубликовать (я не вижу, что из вашего кода), но не учетные данные.Я думаю, что ваша веб-страница показывает вам веб-форму, где вы вводите имя пользователя (адрес электронной почты?) И пароль.Затем браузеры публикуют эту форму .Следовательно, вам нужно реплицировать поведение браузера - кодировать содержимое формы и отправлять их в своем почтовом запросе.Используйте некоторые инструменты для веб-мастеров для популярных браузеров, чтобы увидеть, что именно клиентский браузер отправляет на сервер и как он кодирует данные формы.Далее, очень вероятно, что ваш запрос требует специальных файлов cookie, которые вы можете получить, посетив другую страницу (например, страницу входа).Отправка предварительно настроенных файлов cookie (как вы делаете это в комментариях) не будет работать для большинства сайтов.

Другими словами, правильный механизм:

  1. ПОЛУЧИТЬ веб-страницу входа в систему
  2. собирать файлы cookie
  3. отправлять данные формы POST и передавать полученные файлы cookie взапрос.
  4. собирать другие файлы cookie, которые могли быть отправлены после входа в систему.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...