【问题标题】:How to set the timeout in swift trying to catch html code?如何在 swift 中设置超时以尝试捕获 html 代码?
【发布时间】:2020-06-14 15:25:37
【问题描述】:

我也在尝试使用以下代码从特定 URL 获取 html 代码:

   guard let myURL = URL(string: myURLString) else {
                print("Error: \(myURLString) doesn't seem to be a valid URL")
                return myLinksArray
            }

            do {
                 myHTMLString = try String(contentsOf: myURL, encoding: .ascii)
                print("HTML : \(myHTMLString)")
            } catch let error {
                print("Error: \(error)")
            }

但这样我无法设置超时。有些网站需要太多时间才能得到响应。 解决问题的最佳方法是什么?

提前致谢

【问题讨论】:

  • 你试过了吗:DispatchQueue.main.asyncAfter(deadline: .now() + 10) { // 10 秒后取消你的请求。 }
  • 你想做什么?你的要求在哪里?你能说清楚吗?作为你的问题,如果你能得到回复,那么你可以在一段时间后使用 thiws 方法取消回复:DispatchQueue.main.asyncAfter(deadline: .now() + 10) { // cancel your request after 10 second . }

标签: html swift timeout scrape


【解决方案1】:

您是否考虑过创建一个 URLSession dataTask,我相信这会是一个更好的方法。您可以创建一个自定义的URLSessionConfiguration 并使用它来根据您的需要指定timeoutIntervalForRequesttimeoutIntervalForResource,如下所示:

guard let myURL = URL(string: myURLString) else {
    print("Error: \(myURLString) doesn't seem to be a valid URL")
    fatalError()
}

let sessionConfig = URLSessionConfiguration.default
sessionConfig.timeoutIntervalForRequest = 15 // seconds
sessionConfig.timeoutIntervalForResource = 15 // seconds


let dataTask = URLSession(configuration: sessionConfig).dataTask(with: myURL) { (data, urlResponse, error) in
    guard let data = data else { return }
    let myHTMLString = String(data: data, encoding: .ascii)
    print("HTML : \(myHTMLString ?? "")")
}

dataTask.resume() // start the request

【讨论】:

  • 谢谢它的工作!您是否也知道如何设置用户代理?
  • @filiking 您可以像这样更改用户代理:sessionConfig.httpAdditionalHeaders = ["User-Agent": "Whatever you want"]
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-11
  • 2012-01-28
  • 1970-01-01
  • 2016-05-11
  • 2015-01-03
相关资源
最近更新 更多