我的目标是登录网站,然后获取我的帐户信息。我正在使用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的信息(谷歌分析))< / p>
1)如何保持登录状态?
2)是否还有其他问题阻止我保持登录状态?
3)是否有任何网站实际使用crawler4j?
到目前为止我尝试了什么:(克隆了存储库)
a)在PageFetcher的构造函数中设置CookieStore(虽然它是在http-client库中默认创建的)
b)在 fetchPage (在 PageFetcher 中)我创建了一个HttpClientContext,设置了cookieStore,并将其传递给了execute方法
但是没有成功。我也尝试webmagic并使用我自己的下载程序/ httpClientGenerator扩展它以支持(表单)身份验证,但我遇到了同样的问题
答案 0 :(得分:0)
这真的很尴尬。在再次检查页面后,特别是表单,我意识到action
指向登录/登录。因此,在我的AuthInfo
中将网址更改为 http://www.java-forum.org/login/login 时,我会收到我的个人信息。