Как мне нужно прочитать/знать, чтобы войти на сайт и выполнить действие?

Это мини-проект, который мне поручили как часть марафона «научись программировать». Мне необходимо

  1. Войдите на веб-сайт, для которого требуется пользователь/пароль (например, facebook), и верните ответ. Мне удалось добиться этого, используя классы WebRequest и WebResponse.
  2. Следующий шаг — отправить сообщение моему репетитору программно.

Вот где я в тупике. Как получить доступ к функции «отправить сообщение» на сайте? Я предполагаю, что мне нужно сначала найти параметры запроса, которые я могу сделать с помощью firebug, но я не понимаю, как я могу сохранить свой «статус входа в систему» ​​и отправить сообщение? Я немного искал, и я думаю, что это связано с файлами cookie, но я не уверен, как действовать дальше.

Спасибо.


person super9    schedule 29.12.2010    source источник


Ответы (2)


вам нужна CookieCollection; после получения ответа на запрос входа в систему вы можете прочитать файлы cookie из ответа.

        var cookies = new CookieContainer();
        ServicePointManager.Expect100Continue = false;
        CookieCollection receivedCookies = new CookieCollection();

        try
        {
            var request = (HttpWebRequest) WebRequest.Create(ServerUrl + "index.php");
            request.Method = "POST";
            request.ContentType = "application/x-www-form-urlencoded";
            request.CookieContainer = cookies;

            string postData = "try=&username=someLogin&password=somepass";
            byte[] byteArray = Encoding.UTF8.GetBytes(postData);
            request.ContentLength = byteArray.Length;

            using (Stream dataStream = request.GetRequestStream())
            {
                dataStream.Write(byteArray, 0, byteArray.Length);
            }

            // Get the response.
            using (WebResponse response = request.GetResponse())
            {
                receivedCookies = ((HttpWebResponse) response).Cookies;
                Logger.DebugFormat("received {0} cookies", receivedCookies.Count);
                using (Stream responseStream = response.GetResponseStream())
                {
                    using (StreamReader reader = new StreamReader(responseStream))
                    {
                        string responseFromServer = reader.ReadToEnd();
                        Logger.DebugFormat("response from server after login-post: {0}", responseFromServer);
                    }
                }
            }
        }
        catch (Exception ex)
        {
            Logger.FatalFormat("there was an exception during login: {0}", ex.Message);
            return (int) CreateResult.GenericError;
        }

во время последующих запросов вы всегда должны добавлять эти файлы cookie:

            var request =
                (HttpWebRequest)WebRequest.Create(ServerUrl + "index.php?nav=callcenter&sub=ccagents&action=new");
            request.Method = "POST";
            request.ContentType = "application/x-www-form-urlencoded";
            request.CookieContainer = cookies;
            request.CookieContainer.Add(receivedCookies);
person karlis    schedule 29.12.2010
comment
Я достаточно уверен, что вам не нужно вручную добавлять полученные файлы cookie. - person SLaks; 29.12.2010

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

person Klaus Byskov Pedersen    schedule 29.12.2010