【问题标题】:Not all cookies being saved using cookiecontainer and webclient/httpwebrequest并非所有 cookie 都使用 cookiecontainer 和 webclient/httpwebrequest 保存
【发布时间】:2011-01-19 10:26:55
【问题描述】:
我正在尝试使用 CookieAwareClient 登录网站(此处的代码:C# WebClient Log onto Website)。当我使用网络浏览器登录该网站时,我得到了大约 10 个 cookie。如果我禁用 JavaScript 并尝试登录,我会得到 5(activeTab、id、mcim、PHPSESSID、用户名)。但是当我尝试使用 CookieAwareClient 登录时,唯一保存的 cookie 是 PHPSESSID。
没有保存其他 cookie 的原因可能是什么?我知道 WebClient 不执行 JavaScript,但是在禁用 JavaScript 时生成的其他 3 个 cookie 也没有被保留。
【问题讨论】:
标签:
httpwebrequest
webclient
httpwebresponse
session-cookies
cookiecontainer
【解决方案1】:
首先,一个显而易见的问题:在您关闭浏览器中的脚本并尝试登录之前,您是否先清除了 cookie?如果没有,请清除 cookie 并重试。
假设您首先清除了 cookie,并且在无脚本登录后仍然获得 5 个新 cookie,然后通过查看丢失的 cookie 名称,我猜您的 CookieAwareClient 实际上并未成功登录用户。如果登录不成功,我会期望缺少“用户名”cookie。当您查看登录请求返回的 HTML 时,是否看起来像是成功登录?还是返回某种错误?
如果返回的 HTML 是成功登录,那么我要查看的下一个可能的罪魁祸首是浏览器正在执行但您的代码未执行的其他请求。例如,登录页面可能有一个 META REFRESH,它重定向到另一个页面(设置了一个 cookie)。或者登录页面可能包含一个IFRAME、IMG、SCRIPT 等,它们依次设置一个cookie。要对此进行诊断,请使用 Fiddler、Firebug 或其他类似工具来查看您的浏览器正在执行哪些特定 HTTP 请求作为登录过程的一部分。确保登录页面的 POST 正在执行所有 cookie 设置,如果没有,那么您需要在初始登录后向您的代码添加额外的请求。
如果事实证明只有一个 HTTP 请求设置 cookie,那么问题很可能是您的代码正在发送(或不发送)到服务器的 HTTP 标头或 POST 数据。浏览器可能会发送不同的标头或 POST 数据。诊断此问题还需要 Firebug、Fiddler 或类似工具来比较浏览器发送的 HTTP 标头和 POST 数据与您的代码发送的数据。
如果这些建议都不起作用,请发表评论,我们可以进行迭代。