Научно-образовательный IT-форум

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Научно-образовательный IT-форум » Задачи и вопросы » [+] Аутентификация на основе форм на языке программирования C#


[+] Аутентификация на основе форм на языке программирования C#

Сообщений 1 страница 5 из 5

1

Накидал код для аутентификации по адресу https://landwatersun.ru/login.php по логину/паролю - user/user.

string loginUri = "https://landwatersun.ru/login.php";
string Uri = "https://landwatersun.ru";
string username = "user";   // (Your username)
string password = "user";   // (Your password)

string reqString = "req_username=" + username + "&req_password=" + password;
byte[] requestData = Encoding.UTF8.GetBytes(reqString);

CookieContainer cc = new CookieContainer();
var request = (HttpWebRequest)WebRequest.Create(loginUri);
request.Proxy = null;
request.CookieContainer = cc;
request.Method = "POST";

request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = requestData.Length;

using (Stream st = request.GetRequestStream())
    st.Write(requestData, 0, requestData.Length);

using (var response = (HttpWebResponse)request.GetResponse())
    foreach (Cookie c in response.Cookies)
    Console.WriteLine(c.Name + " = " + c.Value);

var req = (HttpWebRequest)WebRequest.Create(Uri);
req.Proxy = null;
req.CookieContainer = cc;
using (WebResponse res = req.GetResponse())
using (Stream rs = res.GetResponseStream())
using (FileStream fs = File.Create(@"c:\Users\landw\Downloads\code.html"))
    rs.CopyTo(fs);

До тех пор, пока мы будем указывать сс последующим объектам WebRequest, мы будем считаться аутентифицированным пользователем.

Судя по контексту ответа (см. code.html) похоже аутентификации не проходит. В чем может быть дело?

  • Цитировать Сообщение 1
  • 2

    Попробовал прописать заголовки вручную, но исход прежний.

    void Main()
    {
    func().Wait();
    }

    async Task func()
    {
    var Content = new FormUrlEncodedContent(new Dictionary<string, string>
    { { "orm_sent", "1" },
    { "redirect_url", "" },
    { "req_username", "user" },
    { "req_password", "user" },
    { "login", "%C2%EE%E9%F2%E8" } });

    var client = new HttpClient();

    client.DefaultRequestHeaders.Add("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9");
    client.DefaultRequestHeaders.Add("Accept-Language", "ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7");
    client.DefaultRequestHeaders.Add("Cache-Control", "max-age=0");
    client.DefaultRequestHeaders.Add("Connection", "keep-alive");
    client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/x-www-form-urlencoded"));
    client.DefaultRequestHeaders.Add("Host", "landwatersun.ru");
    client.DefaultRequestHeaders.Add("Origin", "https://landwatersun.ru");
    client.DefaultRequestHeaders.Add("Referer", "https://landwatersun.ru/login.php");
    client.DefaultRequestHeaders.Add("Upgrade-Insecure-Requests", "1");
    client.DefaultRequestHeaders.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.102 Safari/537.36");

    var response = await client.PostAsync("https://landwatersun.ru/login.php?action=in", Content);
    string responseString = await response.Content.ReadAsStringAsync();

    using (StreamWriter sw = new StreamWriter(@"c:\Users\landw\Downloads\code.html", false, System.Text.Encoding.Default))
    {
        sw.Write(responseString);
    }
    }

  • Цитировать Сообщение 2
  • 3

    landwatersun написал(а):

    Попробовал прописать заголовки вручную, но исход прежний.

    В строчке кода { "orm_sent", "1" } пропустил букву "f".

    Теперь авторизация проходит успешно даже без указания заголовков.

    void Main()
    {
    func().Wait();
    }

    async Task func()
    {
    var Content = new FormUrlEncodedContent(new Dictionary<string, string>
    { { "form_sent", "1" },
    { "redirect_url", "" },
    { "req_username", "user" },
    { "req_password", "user" },
    { "login", "%C2%EE%E9%F2%E8" } });

    var client = new HttpClient();

    var response = await client.PostAsync("https://landwatersun.ru/login.php?action=in", Content);
    string responseString = await response.Content.ReadAsStringAsync();

    using (StreamWriter sw = new StreamWriter(@"c:\Users\landw\Downloads\code.html", false, System.Text.Encoding.Default))
    {
        sw.Write(responseString);
    }
    }

  • Цитировать Сообщение 3
  • 4

    Указанные данные формы

    var Content = new FormUrlEncodedContent(new Dictionary<string, string>
    { { "form_sent", "1" },
    { "redirect_url", "" },
    { "req_username", "user" },
    { "req_password", "user" },
    { "login", "%C2%EE%E9%F2%E8" } });

    получены посредством инструмента разработчика браузера Google Chrome.

    https://bitbucket.org/landwatersun/forum/downloads/20200913.png

  • Цитировать Сообщение 4
  • 5

    Развил рассмотренный пример с повторением полученных cookie-наборов (с их сериализацией и десиариализацией) в будущем запросе.

    void Main()
    {
    func().Wait();
    }

    async Task func()
    {
    CookieContainer cc = new CookieContainer();
    var handler = new HttpClientHandler { CookieContainer = cc };
    var request = new HttpRequestMessage(HttpMethod.Post, "https://landwatersun.ru/login.php?action=in");
    request.Content = new FormUrlEncodedContent(new Dictionary<string, string>
    { { "form_sent", "1" },
    { "redirect_url", "" },
    { "req_username", "user" },
    { "req_password", "user" },
    { "login", "%C2%EE%E9%F2%E8" } });
    var client = new HttpClient(handler);
    var response = await client.SendAsync(request);
    string responseString = await response.Content.ReadAsStringAsync();
    using (StreamWriter sw = new StreamWriter(@"c:\Users\landw\Downloads\code.html", false, System.Text.Encoding.Default))
    {
        sw.Write(responseString);
    }

    var formatter = new SoapFormatter();
    using (Stream s = File.Create(@"c:\Users\landw\Downloads\cookies.dat"))
        formatter.Serialize(s, cc);
       
    CookieContainer cc2 = null;
    using (Stream s = File.OpenRead(@"c:\Users\landw\Downloads\cookies.dat"))
        cc2 = (CookieContainer)formatter.Deserialize(s);

    var handler2 = new HttpClientHandler { CookieContainer = cc2 };
    var client2 = new HttpClient(handler2);
    var response2 = await client2.GetAsync("https://landwatersun.ru");
    string responseString2 = await response2.Content.ReadAsStringAsync();
    using (StreamWriter sw = new StreamWriter(@"c:\Users\landw\Downloads\code2.html", false, System.Text.Encoding.Default))
    {
        sw.Write(responseString2);
    }
    }

  • Цитировать Сообщение 5
  • Быстрый ответ

    Напишите ваше сообщение и нажмите «Отправить»



    Вы здесь » Научно-образовательный IT-форум » Задачи и вопросы » [+] Аутентификация на основе форм на языке программирования C#