在本地写一个cookie

时间:2012-11-27 14:35:47

标签: c#

我让我的程序(c#)登录到网站,我得到正确的缓冲cookie信息。然而,当我想要在登录后检索正确的数据时,我得到一个401,会话超时。

所以我想,网站一定不能检索那个cookie信息。无法弄清楚如何存储它以便网站可以检索它。

        WebRequest req = WebRequest.Create(Url);
        req.ContentType = "application/x-www-form-urlencoded";
        req.Method = "POST";
        byte[] bytes = Encoding.ASCII.GetBytes(Gegevens);
        req.ContentLength = bytes.Length;
        using (Stream os = req.GetRequestStream())
        {
        os.Write(bytes, 0, bytes.Length);
        }
        WebResponse resp = req.GetResponse();
        cookieHeader = resp.Headers["Set-cookie"];

cookieHeader,包含正确的信息。提前谢谢。

2 个答案:

答案 0 :(得分:3)

您需要为自己的网络请求分配CookieContainer,并对以下请求使用同样的CookieContainer

请参阅MSDN for reference

您可以(如果您想在关闭申请时保留Cookie)从CookieContainer获取Cookie列表并序列化这些Cookie。打开应用程序后,您可以反序列化并重建CookieContainer

答案 1 :(得分:1)

根据您提供的评论,我会冒险猜测您并未正确将登录Cookie添加到下一个WebRequest。使用WebRequest对象进行Cookie处理有点困难,因此我建议使用内置Cookie解析的HttpWebRequestHttpWebResponse。您只需要在这里和那里更改几行代码:

制作请求(在您的问题中使用相同的示例)

CookieContainer cookies = new CookieContainer();

// When using HttpWebRequest or HttpWebResponse, you need to cast for it to work properly
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
req.CookieContainer = cookies;
req.ContentType = "application/x-www-form-urlencoded";
req.Method = "POST";

byte[] bytes = Encoding.ASCII.GetBytes(Gegevens);
req.ContentLength = bytes.Length;
using (Stream os = req.GetRequestStream())
{
    os.Write(bytes, 0, bytes.Length);
}

// Cast here as well
using (HttpWebResponse resp = (HttpWebResponse)req.GetResponse())
{
    // Code related to the web response goes in here
}

目前,您的Cookie信息已保存在CookieContainer对象中。它可以在以后的代码中重用,以验证您的登录信息。如果您不需要,则无需将此cookie信息写入磁盘。

使用Cookie信息构建请求 (与上面几乎相同,但你没有添加POST数据而你正在使用GET请求)

HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
req.CookieContainer = cookies; // This is where you add your login cookies to the current request
req.Method = "GET";

using (HttpWebResponse resp = (HttpWebResponse)req.GetResponse())
{
    // Code related to the web response goes here
}

希望这会让你走上正轨:)