java - 如何从 Play WS 响应中解析 HTML

标签 java web-services playframework-2.0

我有一个 Play 2.2 应用程序,我正在其中进行 WS 调用,并希望解析响应中返回的 HTML。我想查找特定的输入元素并读取其中存储的值。输入元素只有一个名称属性,称为authenticity_token(无ID)。这是代码:

final Promise<WS.Response> loginPagePromise = WS.url("https://www.mysite.com/login").get();

        Promise<String> authToken = loginPagePromise.map(
                new Function<WS.Response, String>() {
                    public String apply(WS.Response response) {
                        Document doc = response.asXml();
                        NodeList inputElements = doc.getElementsByTagName("input");
                        for (int i = 0; i < inputElements.getLength(); i++) {
                            System.out.print("Item "+(i+1));
                            Node n = inputElements.item(i);
                            NamedNodeMap m = n.getAttributes();
                            String inputName = m.getNamedItem("name").getTextContent();
                            if (inputName.equals("authenticity_token")) {
                                String token = m.getNamedItem("value").getTextContent();
                                System.out.print("AUTH TOKEN field value: "+ token);
                                return token;
                            }
                        }
                        return "";
                    }
                }
        );

我在 Document doc = response.asXml() 行上收到错误:

[Fatal Error] :5:313: Element type "e.length" must be followed by either attribute specifications, ">" or "/>".

我当然不是第一个想做这样的事情的人。知道为什么它不起作用吗?

最佳答案

这不是对您的代码的直接答案,但您是否考虑过使用 NekoHTML相反?

它是一个 Java 库,旨在完全完成您想要做的事情,但没有任何麻烦。

关于java - 如何从 Play WS 响应中解析 HTML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24190214/

相关文章:

javascript - Scala Play : Concurent. 广播无法与 EventSource 配合使用

scala - 我如何合并两个 Scala (String, String) for Play!查询字符串?

关于静态方法的 Java 编码约定

java - 使用 JAX-WS 的并发 Web 服务请求

java - 如何在 Java 中实现多核算法?

web-services - ColdFusion中基于REST的网站

web-services - 如何通过向 Siebel Inbound WebService 请求获取 WSDL?

playframework - 向 Play 2.0 (scala/sbt) 项目添加构建步骤

java - 在 java jframe 中结束行并继续

java - 格式化 HTMLEditorKit