java - 无法从 html 响应中提取属性

标签 java xml rest-assured

我正在尝试从 html 响应中提取属性。

<html>
<head></head>
<body>
<script type="text/javascript" src="/sso/js/jquery/1/jquery.min.js?20190218"></script>
{serviceUrl: 'https://abcd/12345', serviceTicket: 'ABCD-123-1271821818sdsdbbsdgw3-pas'}
</body>
</html>

Web 服务的响应给了我上面的 html 响应,我想从中提取 serviceUrl 属性的值,但它给了我 nullpointer 异常。在下面的代码中,res 是存储为字符串的 html 响应。

Response res =  given()
    .queryParam("logintoken", logintoken)
    .when()
    .get("/sso/login")
    .then().assertThat().statusCode(200).extract().response();

Document doc = Jsoup.parse(res.toString());
Element link = doc.select("script").first();
String serviceUrl = link.attr("serviceUrl");
System.out.println(serviceUrl);

我希望最后一条语句中的 serviceUrl 能让我回来 https://abcd/12345但它给了我空指针异常

最佳答案

要以字符串形式获取完整的响应正文,您需要使用 asString()方法而不是 toString() 。这是一个例子:

Response response =  given()
    .queryParam("logintoken", logintoken)
    .when()
    .get("/sso/login")
    .then().assertThat().statusCode(200).extract().response();

//Extract response body as a string
String html = response.asString();

//Parse extracted html with Jsoup
Document document = Jsoup.parse(html);

//Get <body> element from html
Element body = document.body();

//Extract text from <body> element
String bodyText = body.ownText();

//Parse extracted text using Jackson's ObjectMapper
Map<String, Object> map = new HashMap<>();
ObjectMapper mapper = new ObjectMapper();

//Configure Jackson to work with unquoted fields and single quoted values
mapper.configure(Feature.ALLOW_SINGLE_QUOTES, true);
mapper.configure(Feature.ALLOW_UNQUOTED_FIELD_NAMES, true);

try {
  map = mapper.readValue(String.valueOf(bodyText), new TypeReference<Map<String, Object>>() {});
} catch (Exception e) {
  e.printStackTrace();
}

System.out.println(map.get("serviceUrl"));

上面的示例中使用了 Jackson 的 ObjectMapper 来解析 <body> 中的文本。 。您可以在这里阅读更多相关信息 - https://github.com/FasterXML/jackson-databind

关于java - 无法从 html 响应中提取属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58384008/

相关文章:

java - 杀死应用程序时 SharedPreferences 消失

java - Vertx FileUpload 上传不带扩展名的文件

java - io.rest-assured 和 jayway rest-assured 有什么区别?

java - 请放心,由于响应中数据丢失,测试会间歇性失败

java - Comparable接口(interface)的泛化

java - 我的程序打印出奇怪的结果 : cycle@530daa cycle@530daa cycle@a62fc3 cycle@a62fc3

xml - 添加数据源属性 - Tomcat XML

php - 如何使用 PHP+mySQL 从 XML 中获取所有节点?

c# - 如何使用 XDocument 读取 xml 文件?