C # HttpWebRequest Использовать cookie - PullRequest
       21

C # HttpWebRequest Использовать cookie

0 голосов
/ 19 сентября 2018

У меня небольшая проблема с обработкой файлов cookie в C #

Так что на моем веб-сайте у меня есть страница входа, после входа я перенаправлен на домашнюю страницу.Я получаю с HttpWebRequest подключение и следую за перенаправлением, я создал класс, вот он:

class webReq
{
    private string urlConnection;
    private string login;
    private string password;
    private CookieCollection cookieContainer;
    private long executionTime = 0;



    public webReq(string urlCo, string login, string pass)
    {
        this.urlConnection = urlCo;
        this.login = login;
        this.password = pass;
        this.cookieContainer = null;
    }

    public void StartConnection()
    {
        string WriteHTML = "D:/REM/Connection.html";

        List<string> datas = new List<string>();
        datas.Add("Username=" + this.login);
        datas.Add("Password=" + this.password);
        datas.Add("func=ll.login");
        datas.Add("NextURL=/admin/livelink.exe");
        datas.Add("loginbutton=Sign in");
        string postData = "";
        postData = string.Join("&", datas);
        var buffer = Encoding.ASCII.GetBytes(postData);

        try
        {
            var watch = System.Diagnostics.Stopwatch.StartNew();
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(this.urlConnection);
            request.AllowAutoRedirect = true;
            request.Method = "POST";
            request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1003.1 Safari/535.19";
            request.Accept = "text/html, application/xhtml+xml, */*";
            request.ContentType = "application/x-www-form-urlencoded";
            request.ContentLength = buffer.Length;
            request.CookieContainer = new CookieContainer();

            Stream stream = request.GetRequestStream();
            stream.Write(buffer, 0, buffer.Length);
            stream.Close();
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            stream = response.GetResponseStream();
            watch.Stop();
            this.executionTime = watch.ElapsedMilliseconds;

            StreamReader reader = new StreamReader(stream);
            System.IO.File.WriteAllText(WriteHTML, reader.ReadToEnd());
            this.cookieContainer = new CookieCollection();
            foreach (Cookie cookie in response.Cookies)
            {
                this.cookieContainer.Add(cookie);
            }
        }
        catch (WebException ex)
        {
            Console.WriteLine(ex.GetBaseException().ToString());
        }
    }
}

Я хорошо загружаю домашнюю страницу, и мне удается получить cookie.

Поэтому я разработал функцию использования моих файлов cookie для просмотра веб-сайта:

    public void connectUrl(string url, int numeroTest)
    {
        string WriteHTML = "D:/REM/Page"+numeroTest+".html";

        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);

        //Add cookie to request.CookieContainer
        request.CookieContainer = new CookieContainer();
        request.CookieContainer.Add(this.cookieContainer);
        var watch = System.Diagnostics.Stopwatch.StartNew();
        HttpWebResponse response = (HttpWebResponse)request.GetResponse();
        Stream stream = response.GetResponseStream();
        watch.Stop();
        this.executionTime = watch.ElapsedMilliseconds;
        StreamReader reader = new StreamReader(stream);
        System.IO.File.WriteAllText(WriteHTML, reader.ReadToEnd());

    }

Обычно мне нужно получить три файла cookie, как на веб-сайте: Cookie on webSite

Только я не могу перемещаться по веб-сайту, я в конечном итоге на странице входа в систему, файлы cookie не годятся, и что я нахожусь в состоянии отладки, я загрузил только один файл cookie (BrowseSettings) из трех (LLCookie &LLTZCookie):

Debug cookie C#

Я не понимаю, почему я не могу получить все куки на сайте .... Если у кого-то есть решение!

1 Ответ

0 голосов
/ 20 сентября 2018

Я нашел причину, по которой я не могу получить все файлы cookie, даже если не могу точно определить, почему они работают путем отключения перенаправления, в моем методе StartConnection ():

request.AllowAutoRedirect = true;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...