【问题标题】:CookieContainer confusionCookieContainer 混淆
【发布时间】:2012-08-15 00:22:39
【问题描述】:

据我了解,CookieContainer通过HttpWebRequests持久化cookie的基本用法如下:

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
CookieContainer cookies = new CookieContainer();
request.CookieContainer = cookies;
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{
  // Do stuff with response
}

然后:

request = (HttpWebRequest)WebRequest.Create(new url);
request.CookieContainer = cookies;
etc...

但我无法理解这个过程背后的逻辑。变量 cookies 在初始化后似乎没有在任何地方重新分配。第一个 WebResponse 中的 cookie 究竟是如何传送到第二个 WebRequest 中的?

【问题讨论】:

    标签: c# session httpwebrequest cookiecontainer


    【解决方案1】:

    这是因为当您从网站检索响应时,它会自动填充您用于请求的 cookie 容器。您可以通过查看响应前后存在哪些 cookie 来测试这一点:

    //Build the request
    Uri site = new Uri("http://www.google.com");
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(site);
    CookieContainer cookies = new CookieContainer();
    request.CookieContainer = cookies;
    
    //Print out the number of cookies before the response (of course it will be blank)
    Console.WriteLine(cookies.GetCookieHeader(site));
    
    //Get the response and print out the cookies again
    using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
    {
        Console.WriteLine(cookies.GetCookieHeader(site));
    }
    
    Console.ReadKey();
    

    【讨论】:

    • 我明白了。那我说“request.CookieContainer = cookies;”这句话是对的吗?只是将对象“cookies”的引用传递给 request.CookieContainer 而不是数据本身?
    • 这听起来很对。如果您需要重新了解传递引用/值,请查看 this article
    • 非常感谢。谢谢你。 =)
    猜你喜欢
    • 2014-07-09
    • 1970-01-01
    • 2014-05-06
    • 2015-02-02
    • 2011-05-11
    • 2012-06-02
    • 2019-06-26
    • 2012-04-18
    • 2023-03-29
    相关资源
    最近更新 更多