【问题标题】:C# How can I call multiple POST, GET requests with same cookie via HttpWebRequest?C# 如何通过 HttpWebRequest 调用具有相同 cookie 的多个 POST、GET 请求?
【发布时间】:2014-11-20 13:33:39
【问题描述】:

我的问题是,如何通过 HttpWebRequest 在 C# 中使用相同的身份验证 cookie 调用多个请求?我尝试了很多次,但现在我不知道该怎么做:/

我的代码如下:

        var postData = "method=loginFormAccount&args[0][email]=###&args[0][pass]=###&args[0][cache]=37317&args[]=1";
        var data = Encoding.ASCII.GetBytes(postData);

        HttpWebRequest request = (HttpWebRequest)WebRequest.Create("###");
        request.CookieContainer = new CookieContainer();
        request.Method = "POST";
        request.ContentType = "application/x-www-form-urlencoded";
        request.AllowAutoRedirect = true;            

        using (var stream = request.GetRequestStream())
        {
            stream.Write(data, 0, data.Length);
        }

        HttpWebResponse response = (HttpWebResponse)request.GetResponse();

        var cookies = new CookieContainer();
        cookies.Add(response.Cookies);

        System.IO.File.WriteAllText(@desktop + "\\post.html", new StreamReader(response.GetResponseStream()).ReadToEnd());

        // =================================== END LOGIN ==================================== \\

        System.IO.File.WriteAllText(@desktop + "\\cookie.html","");

        foreach (Cookie cook in response.Cookies)
        {
            using (System.IO.StreamWriter file = new System.IO.StreamWriter(@desktop + "\\cookie.html", true))
            {
                file.WriteLine(cook.ToString());
            }
            // Show the string representation of the cookie.                
        }

        HttpWebRequest requestNext = (HttpWebRequest)WebRequest.Create("####");
        requestNext.CookieContainer = cookies;
        requestNext.Method = "GET";

        HttpWebResponse responseNext = (HttpWebResponse)requestNext.GetResponse();

        //var responseString = new StreamReader(response.GetResponseStream()).ReadToEnd();

        System.IO.File.WriteAllText(@desktop + "\\get.html", new StreamReader(responseNext.GetResponseStream()).ReadToEnd());

我的主要问题是,我得到的 cookie 是身份验证前的 cookie,所以我必须做一些事情来获取身份验证后的 cookie。

【问题讨论】:

  • 您确定从第一个请求中获取了身份验证 cookie 吗?
  • 是的,我确定。我得到了一些东西。到目前为止,代码运行良好 var cookies = new CookieContainer(); cookies.Add(response.Cookies); 应用程序将 cookie 添加到 CookieContainer 但它无法将此 CookieContainer 添加到下一个请求。我编写了一个小函数,它将我的 cookie 从第一个请求(这是工作 cookie)和第二个请求(GET)写入文件,其中创建新 Cookie 的请求就像第一个没有通过一样。我不知道它为什么要创建新的 cookie:/

标签: c# httpwebrequest http-post http-get multiple-instances


【解决方案1】:

试试这个:

HttpWebRequest requestNext = (HttpWebRequest)WebRequest.Create("####");
requestNext.CookieContainer.Add(cookies);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-21
    • 1970-01-01
    • 2017-11-23
    • 1970-01-01
    • 1970-01-01
    • 2011-12-15
    • 1970-01-01
    • 2017-06-29
    相关资源
    最近更新 更多