使用HttpWebRequest获取HttpOnly cookie

时间:2013-05-09 15:37:16

标签: c# cookies httpwebrequest

我正在尝试使用.NET的HttpWebRequest POST方法(以C#编写的代码)以编程方式登录网站。最初我将请求发送到登录页面,将响应cookie保存到CookieContainer,并使用登录详细信息(email =“MyEmail”& pass =“MyPassword”)进行第二次HttpWebRequest编码并流式传输到请求。

由于我没有设法登录,我使用Fiddler检查了登录请求附带的cookie,发现有些cookie被标记为HttpOnly。也就是说,这些cookie不会出现在先前请求的任何响应头中(不用说它们也不会出现在脚本中(html或js))。

我做了一些研究并将Wininet.dll库导入到我的代码中,如here所述。 这是我的代码:

class CookieReader
{
    static int INTERNET_COOKIE_HTTPONLY = 0X000020000;

    [DllImport("Wininet.dll", SetLastError = true)]

    static extern bool InternetGetCookieEx(string url, string cookieName, StringBuilder cookieData, ref int size, int flags, IntPtr pReserved);

    public static string GetHttpOnly(string url)
    {
        int size = 1024;
        StringBuilder builder = new StringBuilder(size);
        if (InternetGetCookieEx(url, null, builder, ref size, INTERNET_COOKIE_HTTPONLY, IntPtr.Zero))
        {
            return builder.ToString();
        }

        else
            return null;
    }
}

我有两个问题: 首先,对于任何URL,InternetGetCookiesEx方法始终返回false。由于我是C#的新手,我的第一个怀疑是我的代码出了问题。

其次,我无法想出一种方法将HttpWebRequest POST与InternetGetCookieEx方法结合起来。这个方法只获取一个url作为参数,没有任何登录细节,我不知道它是如何产生请求的(我想它确实如此)。

我希望我已经清楚了......建议会非常多(非常感谢)。

0 个答案:

没有答案