【问题标题】:How do I fetch HTML of URL using Vapor Swift?如何使用 Vapor Swift 获取 URL 的 HTML?
【发布时间】:2020-09-02 10:13:15
【问题描述】:

在我的一条路线中,我想从另一个站点获取 HTML。 https://docs.vapor.codes/4.0/content/ documents 支持 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?

【问题讨论】:

  • 看看response.body,这就是你要找的:)
  • @imike Cannot convert value of type 'ByteBuffer?' to specified type 'String'。如何将 HTML 作为字符串获取?
  • String(buffer: byteBuffer)
  • @imike 你考虑过添加这个作为答案吗?
  • 不,我很高兴能帮上忙 :)

标签: swift request response vapor


【解决方案1】:

有几种方法可以做到这一点,具体取决于您碰巧喜欢哪个 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)

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

let html = String(buffer: body)

请记住,.readBytes 方法将增加 ByteBuffer.readIndex,而 String 初始化程序不会。虽然我认为这对你来说并不重要。

【讨论】:

    猜你喜欢
    • 2014-11-25
    • 2015-12-09
    • 2019-01-18
    • 1970-01-01
    • 2016-12-15
    • 1970-01-01
    • 1970-01-01
    • 2019-06-12
    • 1970-01-01
    相关资源
    最近更新 更多