使用 crawler4j 进行身份验证

Authentication with crawler4j

我的目标是登录网站,然后获取我的帐户信息。我正在使用 crawler4j 4.2

AuthInfo authJavaForum = new FormAuthInfo("myuser", "mypwd", "http://www.java-forum.org", "login", "password");
config.addAuthInfo(authJavaForum);
PageFetcher pf = new PageFetcher(config);
CrawlController ctrl = new CrawlController(config, pf, robotsts);
// add the page I want as seed
ctrl.addSeed("http://www.java-forum.org/account/personal-details");
ctrl.startNonBlocking(BasicCrawler.class, 5);

在日志记录中,我看到身份验证成功,而且我还看到 http 客户端连接现在包含一个 cookie,其中包含我从页面获得的会话。但似乎我还遗漏了一些东西,获取我的个人详细信息的请求失败,错误代码为 403(禁止访问),就好像我没有登录一样。

我使用wireshark是为了看看使用crawler4j和手动登录的区别,但是请求似乎是一样的(最大的区别是我的cookie不包含任何关于ga的信息(google分析))

1) 如何保持登录状态?

2) 是否还有任何其他问题阻止我保持登录状态?

3) 是否有实际使用 crawler4j 的站点?

到目前为止我尝试了什么:(克隆存储库)

a) 在 PageFetcher 的构造函数中设置 CookieStore(尽管它是在 http-client 库中默认创建的)

b) 在 fetchPage 中(在 PageFetcher 中)我创建了一个 HttpClientContext,设置了 cookieStore,并将其传递给执行方法

虽然没有成功。

我也试过 webmagic 并用我自己的 downloader/httpClientGenerator 扩展它以支持(表单)身份验证,但我遇到了同样的问题

相关问题:Crawler4j with authentication

这真是尴尬。再次检查页面后,尤其是表格,我意识到 action 指向 login/login。因此,在我的 AuthInfo 中将 URL 更改为 http://www.java-forum.org/login/login 时,我得到了我的个人详细信息。