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 队列

Alamofire 的 .responseString 方法有啥用?

为全局使用嵌套 Alamofire 回调或返回值

这可以用 Alamofire 播放视频文件同步下载吗?

如何使用 Alamofire(或 NSUrlSession)使调试日志静音?

网速慢或服务器宕机时如何处理 Alamofire 请求?