我正在尝试使用 Java 和表单自动登录各种网站。
我已按照此处找到的教程 https://www.mkyong.com/java/how-to-automate-login-a-website-java-example/ 进行操作并且能够使用 Java HTTPClient 毫无问题地获取、发布然后重新获取(以验证用户是否已登录)。我正在查看这些请求的 HTML 输出,它们显示用户的内容,就像经过身份验证一样。
问题是在我完成身份验证并尝试将用户的浏览器重定向到经过身份验证的 URL 后,系统将再次提示他们输入所有凭据 - 然而,我可以看到第一个请求中的 cookie 仍在浏览器中;他们似乎被忽视了。我正在尝试在 ActionResponse
的 Liferay portlet 中执行此操作。
最佳答案
首先您需要了解身份验证过程中通常会发生什么: 服务器在您的客户端中设置 session cookie。当您登录时,您将准确验证该 session - 由 cookie 标识。
如果您使用服务器 HTTPClient
库登录, session cookie 将存储在您的服务器中。当您将客户端浏览器重定向到外部站点时,浏览器没有该 cookie - 并且正在获取不同的(未经授权的) session 。
问题是:如何将 cookie 从服务器发送到客户端?
答案是:你不能。如果您可以为不同的站点设置 cookie,则会产生一系列安全问题。
尽管如此,有些网站还是提供了服务器到服务器到客户端的身份验证。
这个想法是:您的服务器使用凭据进行身份验证,外部服务器生成一个一次性 URL(或可以从中构建 URL 的一些参数),然后将客户端重定向到该 URL。因为外部服务器可以将该 URL 与您之前的身份验证相关联,所以他将对客户端进行身份验证。但具体实现还要看国外网站。
关于java - 自动登录网站 - Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39647825/