2

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

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

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

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 作为参数,没有任何登录详细信息,而且我不知道它是如何发出请求的(我想它确实如此)。

我希望我已经很清楚了......建议将非常(非常)感激。

4

0 回答 0