我如何使用 Vapor Swift 获取 HTML of URL?
How do I fetch HTML of URL using Vapor Swift?
在我的一条路线中,我想从另一个站点获取 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?
有几种方法可以做到这一点,具体取决于您碰巧喜欢哪种 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
方法将递增 ByteBuffer
的 .readIndex
,而 String
初始化程序不会。虽然我想这对你的情况并不重要。
在我的一条路线中,我想从另一个站点获取 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?
有几种方法可以做到这一点,具体取决于您碰巧喜欢哪种 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
方法将递增 ByteBuffer
的 .readIndex
,而 String
初始化程序不会。虽然我想这对你的情况并不重要。