URLSessions 或 AlamoFire 用于下载每天更新一次的网页?
Posted
技术标签:
【中文标题】URLSessions 或 AlamoFire 用于下载每天更新一次的网页?【英文标题】:URLSessions or AlamoFire for downloading a webpage that updates once a day? 【发布时间】:2018-08-16 21:34:28 【问题描述】:我的一个视图控制器解码并打印网页中的 html。我已经在 *** 和 github 上的示例项目中进行了搜索,似乎人们正在使用 Alamofire 和 Swiftsoup 来执行此操作。
我是初学者,但我想了解为什么我可以使用 URLSessions 时需要 AlamoFire?使用 Alamofire 更好吗?
我认为我的用例很简单。如果我使用 Alamofire,
let getURL = "https://www.someurl.com/extension"
Alamofire.request(getURL, method: .post, parameters: nil, encoding: URLEncoding.default).validate(contentType: ["application/x-www-form-urlencoded"]).response (response) in
if let data = response.data, let utf8Text = String(data: data, encoding: .utf8)
do
parseHTML()
如果我使用 URLSessions,我想应该是这样的:
let httpURL = URL(string: "https://www.someurl.com/extension")!
let httpTask = URLSession.shared.dataTask(with: httpURL)
(data, response, error) in
guard let validData = data, error == nil else
DispatchQueue.main.async(execute:
print("Error getting paragraph\n") )
return
var results = String(data: data!, encoding: String.Encoding.utf8) ?? "Unable to read Paragraph HTML\n"
DispatchQueue.main.async(execute:
print("Correctly read from Paragraph HTML\n")
parseHTML()
)
DispatchQueue.global(qos: DispatchQoS.QoSClass.background).async(execute:
httpTask.resume()
)
附带问题:Swiftsoup 是解码 HTML 的最佳选择吗?有内置的东西可以代替吗?
【问题讨论】:
【参考方案1】:Alamofire/AFNetworking(AFNetworking 是 Objective-c 版本)作为 Apple 的 NSURLConnection 类的替代品获得了广泛关注,该类更底层并且涉及大量样板代码。使用 NSURLConnection 建立下载任务或任何东西并不容易,AFNetworking(当时)使执行问题中的任务变得更容易,而无需编写太多代码。
在 ios7 前后,Apple 发布了 NSURLSession 来替代 NSURLConnection,这使得它与 AlamoFire 的做法非常相似。在这一点上,我个人觉得使用 NSURLSession/URLSession 已经足够简单直接了。也许 AlamoFire 更容易使用,但总的来说它们是相似的。这些天我最终转向 AlamoFire 的唯一一次是当我面临某种限制时。
所以 tl;dr,在 iOS7 之前,AFNetworking 是处理下载任务的一种更简单直接的方式。 Post iOS7 URLSessions 变得更容易使用和设置。
【讨论】:
非常感谢您的解释!我正在构建我的第一个应用程序,我想使用最佳实践,似乎使用本机的东西比依赖项更好,但我不了解功能上的差异。我将使用 URLSessions 运行,因为我只是从单个网页下载 html。 @bhealth 是的,你应该对 URLSessions 更好。在我之前的项目中,当我开始需要下载以继续在后台工作时,我最终切换到了 Alamofire。我认为使用 URLSessions 需要一些额外的配置。以上是关于URLSessions 或 AlamoFire 用于下载每天更新一次的网页?的主要内容,如果未能解决你的问题,请参考以下文章
Alamofire 的 .responseString 方法有啥用?