0

У меня есть 3000 строк Cookies, взял я их с браузера FireFox с помощи расширения, что бы попробовать авторизоваться в разных сервисах.

Перевел я 3000 строк в формат netscape из json, после загружаю их в ContainerCookie и отправляю их в запрос HttpWebRequest. Пытаюсь войти в Gmail, и не получается, перебрасывает на страницу с авторизацией.

Может дело все в размере? Или там есть какие то куки которые присутствуют авторизации Gmail. Потому что эти же куки я опять загружаю в FireFox (через расширение) и у меня все работает, а через запрос HttpWebRequest не могу.

Вот мой код:

internal class Program
{
public static List<String[]> GetCookieLines(String fileName)
{

    List<String[]> cookieLines = new List<String[]>();
    using (FileStream fs = new FileStream(fileName, FileMode.Open))
    using (StreamReader rdr = new StreamReader(fs, Encoding.UTF8))
    {

        String line; // Создаем Strin Line. 
        while ((line = rdr.ReadLine()) != null)
        {
            String[] components = line.Split('\t');
            cookieLines.Add(components);
        }
    }

    return cookieLines;
}

static void Main(string[] args)
{
    CookieContainer cookieContainer = new CookieContainer();
    Console.WriteLine("Введите путь к кукам");
    string d = Console.ReadLine();

    List<String[]> list = new List<string[]>();

    list = GetCookieLines(d);



    foreach (string[] p in list)
    {
        cookieContainer.Add(new Cookie(p[5].Replace(",", "%2C"), p[6].Replace(",", "%2C"), "/", p[0].Replace(",", "%2C")));

        Console.WriteLine(p[0] + "|" + p[1] + "|" + p[2]);
    }


    HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create("https://mail.google.com/mail/u/0/#inbox");

    request.CookieContainer = cookieContainer; // В request ложим куки. 
    HttpWebResponse response = (HttpWebResponse)request.GetResponse();

    using (Stream stream = response.GetResponseStream())
    {
        using (StreamReader reader = new StreamReader(stream))
        {
            string line = ""; 
            while ((line = reader.ReadLine()) != null)
            {
                File.AppendAllText("C:/Users/kusch/Desktop/Новая папка" + "/" + "resilt.txt", line);
            }
        }
    }

    Console.ReadKey();
}

}

  • HttpWebRequest устарел, когда я еще в школу ходил. Сейчас в школу ходит мой сын. Используйте HttpClient. https://ru.stackoverflow.com/q/1178026/373567 И причем тут Гугл Хром? Если кратко, то распарсить куки не так то просто. Потом у CookieCollection есть свои встроенные прибамбасы, авторизуйтесь прямо в C#, не используйте браузер. И Гугл очень хорошо защищен от ботов. – aepot May 20 '22 at 10:49
  • Если вам нужно работать с почтой, используйте протокол IMAP или POP3. Через HTTP ничего не получится, потому что сам сайт веб-почты работает на JavaScript, то есть без полноценного браузера не получится им пользоваться. Это касается конкретно Gmail. – aepot May 20 '22 at 10:54
  • @aepot Здравствуйте, спасибо за ваш ответ. Если что, я написал не про Гугл хром, а про Gmail. Не могу туда зайти. А точнее авторизоваться, вместо этого просто показывает что нужно войти в аккаунт. А в сам аккаунт не может авторизоваться. –  May 20 '22 at 10:56
  • Даже если вы авторизуетесь, вас впереди ждет еще много сюрпризов, например то, что на полученной странице будет пусто. Используйте IMAP. На C# полно библиотек для поддержи этого протокола написано, они есть в NuGet – aepot May 20 '22 at 10:58
  • А что насчет того что мне не нужно работать со страницей, а взять ее данные? А так спасибо за ответ. –  May 20 '22 at 11:07
  • 1
    Смотреть в сетевых логах браузера, на какой запрос приходят в ответ данные. Еще раз, IMAP вам поможет, а веб-страница - нет. – aepot May 20 '22 at 11:10
  • @aepot, хорошо, спасибо вам. Буду тогда использовать IMAP. –  May 20 '22 at 11:27

0 Answers0