我正在尝试使用.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作为参数,没有任何登录细节,我不知道它是如何产生请求的(我想它确实如此) .
我希望我已经清楚了...建议将非常(非常感谢)赞赏 .