如何登录/知道以登录网站并执行操作?

时间:2010-12-29 15:24:57

标签: c# httpwebrequest webrequest

这是一个迷你项目,作为“自学编码马拉松”的一部分,我的任务。我需要

  1. 登录需要用户/通行证的网站(例如facebook)并返回回复。我已设法使用WebRequestWebResponse类来实现这一目标。
  2. 下一步是以编程方式向我的导师发送消息
  3. 这是我难倒的地方。如何访问网站的“发送消息”功能?我想我需要首先查找查询参数,我可以使用firebug这样做,但我很困惑,我怎么能坚持我的“登录状态”并发送消息?我一直在寻找一下,我认为它涉及到cookies,但我不知道如何继续。

    感谢。

3 个答案:

答案 0 :(得分:3)

你需要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);

答案 1 :(得分:1)

当您登录时,Response将包含一个或多个您需要在服务器的任何后续请求中发送的Cookie。

答案 2 :(得分:0)

我在这里找到答案:C# .NET Cookie Handling For After Login