我正在尝试通过Cookie对使用php会话的网站进行网络抓取。它是一个很好的'Squirrelmail网络邮件服务器。
我看过几个帖子,比如this one,但它不适合我。
当主机发送cookie时到达部件时,我尝试使用以下方法检索cookie:
HttpWebResponse rs = (HttpWebResponse)rq.GetResponse();
CookieCollection cc = new CookieCollection();
cc.Add(rs.Cookies);
但是rs.Cookies
是空的。但是,响应中有set-cookie
个标头,我尝试将其用作构建实际Cookie的指南,如下所示:
for (int i = 0; i < rs.Headers.Count; i++)
{
if (rs.Headers.Keys[i].ToLower().Contains("cookie"))
{
string val = rs.Headers[i];
string[] vv = val.Split(";=,".ToCharArray());
Cookie co = new Cookie(vv[0], vv[1]);
// I know this is not the cleanest way to do it
// I've tried to manually set different values for
// co.Domain, co.Path and co.HttpOnly, just to get a working
// example. I tried different alternatives, but it doesn't
// seem to change anything
cc.Add(co);
}
}
接下来,我发送cookie来请求下一页,这只是一个框架集。我到达框架集的事实意味着我已经成功通过身份验证,并且会话cookie正在运行。但是,当我请求其中一个帧时,我会收到一个身份验证错误的网页。我做了我的研究,同时饼干也没有改变。可能出现什么问题?
有些人可能想知道为什么我会在pop / smtp做一个更清洁的工作时尝试访问webmail。答案是这只是学习基础知识的第一个例子,只要我能成功管理会话,我就不在乎网站是什么。
我认为发布所有代码并不是一个好主意,因为它有点乱,而且很长:我计划在它工作后清理它(我会发布它,如果你觉得它值得混淆)。而且,我认为我可能有一个与帧相关的概念错误,这可能是解决问题的关键。