在 groovy 上使用 HtmlUnit 的 Facebook 网络授权

Facebook web authorization using HtmlUnit on groovy

一年前我写了一个简单的 Java 应用程序,它能够通过网络表单在现场授权,然后做一些小工作(比如告诉我有多少新消息等)出于某些原因我不是通过 Graph API 写的。这段代码可以正常工作大约一年。 今天我发现了一些新问题。当我尝试通过 Web 表单授权时,它以错误 "Cookies are not enabled on your browser. Please enable cookies in your browser preferences to continue."

结束

代码如下:

WebClient webClient = new WebClient(BrowserVersion.CHROME);
WebClientOptions webClientOptions = webClient.getOptions();
webClientOptions.setJavaScriptEnabled(true);
webClientOptions.setRedirectEnabled(true);
webClientOptions.setCssEnabled(false);
webClientOptions.setThrowExceptionOnScriptError(false);

HtmlPage loginPage = wc.getPage('https://www.facebook.com/login.php')
HtmlForm loginForm = loginPage.getElementById('login_form')
def loginField = loginForm.getInputByName('email')
loginField.type(login)
def passwordField = loginForm.getInputByName('pass')
passwordField.type(password)
def loginButton = loginForm.getInputByName("login")
HtmlPage fbPage = loginButton.click()

我尝试了一些方法,例如在 Chrome 调试模式下获取 cookie 并将它们直接插入到 CookieManager 中,但没有帮助。

如何通过授权,会出现什么样的问题?

所以,都是因为lib不兼容。 我检查了我的流量,发现我所有的请求都不包含任何 cookie。 早些时候,我已经为我的应用程序的另一部分更新了一些 httpclient 库的版本,最后它造成了一些糟糕的情况:在旧版本的 WebClient 部分中创建的 cookie 没有一些新的 httpclient 库想要的属性。因此通过 BasicDomainCheck 进行匹配检查失败。

答案是更新所有库。完全是我的错。