C# HttpWebRequest POST Login, затем GET другой сайт - PullRequest
1 голос
/ 16 июня 2020

Я написал два запроса HttpWebrequest для входа и получения HTML с сайта. Файлы cookie первого ответа перехватываются в CookieContainer и используются во втором запросе. На данный момент ловит 3 куки. Ответ на второй запрос имеет код статуса 302 найден / перенаправлен. Когда я открыл страницу в моем браузере и использовал на ней ctrl + u, я могу найти «var login_user», заполненный моими данными. Логин с первым запросом выглядит работоспособным, потому что он перенаправляет меня после входа на указанный URL-адрес, но в содержании его ответа HTML я могу найти «var login_user = null». Может ли кто-нибудь помочь мне получить код статуса OK при втором ответе, чтобы получить его содержимое HTML?

        string loginUrl = @"https://id2.g-portal.com/login?redirect=https://www.g-portal.com/auth/login?redirectAfterLogin/https://www.g-portal.com/de/";
        string logDataUrl = @"https://www.g-portal.com/server/.../logs";

        CookieContainer cookieContainer = new CookieContainer();

        // POST request to login
        HttpWebRequest loginRequest = (HttpWebRequest)WebRequest.Create(loginUrl);
        loginRequest.Method = "POST";
        loginRequest.KeepAlive = true;
        loginRequest.ContentType = "application/x-www-form-urlencoded";
        loginRequest.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:77.0) Gecko/20100101 Firefox/77.0";
        loginRequest.CookieContainer = cookieContainer;

        byte[] dataBytes = Encoding.UTF8.GetBytes("login=" + username + "&password=" + password);
        loginRequest.ContentLength = dataBytes.Length;
        using (Stream postStream = loginRequest.GetRequestStream())
        {
            postStream.Write(dataBytes, 0, dataBytes.Length);
        }
        using (HttpWebResponse loginResponse = (HttpWebResponse)loginRequest.GetResponse())
        {
            Uri uri1 = loginResponse.ResponseUri;
            var status1 = loginResponse.StatusCode; // is OK
            using (StreamReader responseReader = new StreamReader(loginResponse.GetResponseStream()))
            {
                string loginHtmlContent = responseReader.ReadToEnd();   
                foreach (Cookie cookie in loginResponse.Cookies)
                {
                    cookieContainer.Add(cookie);
                }
            }
        }

        // GET request for logs
        HttpWebRequest logDataRequest = (HttpWebRequest)WebRequest.Create(logDataUrl);
        logDataRequest.Method = "GET";
        logDataRequest.ContentType = "application/x-www-form-urlencoded";
        logDataRequest.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:77.0) Gecko/20100101 Firefox/77.0";
        logDataRequest.CookieContainer = cookieContainer;
        logDataRequest.AllowAutoRedirect = false;

        string resultHTMLcontent = string.Empty;
        using (HttpWebResponse logDataResponse = (HttpWebResponse)logDataRequest.GetResponse())
        {
            Uri uri2 = logDataResponse.ResponseUri;
            var status2 = logDataResponse.StatusCode;   // is Found
            Console.WriteLine("Log data request succesfully");
            using (StreamReader responseReader = new StreamReader(logDataResponse.GetResponseStream()))
            {
                resultHTMLcontent = responseReader.ReadToEnd(); // is empty
            }
        }
...