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