4

我有几个 HttpWebRequests 和 HttpWebResponses 链接在一起,也使用 CookieContainer。

该代码模拟用户浏览三个不同的“我同意”页面,这些页面设置了 cookie 信息,在第四个页面使用用户名和密码登录,在第五个页面执行 POST(搜索),将响应作为字符串返回。

有没有办法可以将 HttpWebRequest 对象维护为“已登录”,以避免每次用户执行搜索时都执行这些步骤?

我可以将它设置为静态,如果它为空或缺少 cookie 信息,它可以运行所有步骤,否则只做用户需要的帖子?这有什么好的模式?

4

1 回答 1

5

如果您登录的服务器使用基于 cookie 的身份验证,那么您必须创建一个 System.Net.CookieContainer 来存储身份验证 cookie。这很简单:

CookieContainer container = new CookieContainer();

// Create web request
request.CookieContainer = container;

// Create next web request
nextRequest.CookieContainer = container;

// And so on
...

只需为所有 HttpWebRequest 对象重用 CookieContainer 对象,并将其保存在内存中以备后用。

CookieContainer 是可序列化的,因此您可以在需要时将其保存在磁盘上。即使您的用户重新启动您的应用程序,这也将允许您保留您的 cookie。

或者,如果页面不使用 cookie,而是将会话 id 存储在 url 中,您需要在您访问的页面的 url 中继续传递会话 id。只需将其附加到 url,它应该可以工作。:-)

于 2009-06-24T07:28:44.077 回答