我如何使用蒸气快速获取html网址?

问题描述

在我的一条路线中,我想从其他站点获取HTML。 https://docs.vapor.codes/4.0/content/文档支持JSON等,但我在原始HTML上找不到任何内容

request.client.get(URI(string: "https://example.com/")).map { (response: ClientResponse) -> String? in
    if response.status == .ok && response.content.contentType == .html {
        return response.content... // How do I get raw html?
    }

    return nil
}

如何从客户端响应中获取原始HTML?

解决方法

有两种方法可以执行此操作,具体取决于您碰巧使用哪个String初始化程序。请注意,要使用以下任何一种方法,您将需要先打开响应正文:

guard let body = response.body else {
    throw Abort(.internalServerError)
}

第一种方法是使用ByteBuffer.readString方法。

guard let html = body.readString(length: body.readableBytes) else {
    throw Abort(.internalServerError)
}

另一种方法是使用String(decoding:as:)初始化程序,该初始化程序可用于将UInt8整数的任何集合转换为String

let html = String(decoding: body.readableBytesView,as: UTF8.self)

最后,您可以使用@iMike建议的String(buffer:)初始化程序。

let html = String(buffer: body)

请记住,.readBytes方法将递增.readIndex的{​​{1}},而ByteBuffer初始化程序不会。尽管我认为这对您来说并没有太大关系。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...