如何使用 Swift 从 URL 获取 HTML 源代码

2024-04-04

我需要查看某个 URL 给出的页面的 HTML。如果我有这个,使用 Swift 获取该 URL 的 HTML 源的最有效和同步的方法是什么?我无法在网上找到一种简洁的方法将其返回到变量中,而不是将其打印在completionHandler 中。

我需要在使用 URL 的任何调用之外操作源。这在 Swift 中是如何完成的?


免责声明:由于这得到了相当多的浏览,我只是想提醒大家,这里的答案是同步的,如果您在主线程上执行此操作,将会阻止您的应用程序。您应该始终异步执行此操作(在后台线程中),但问题要求同步方法,因此此处解释如何执行此操作超出了范围。


你可能应该看看这个方法:

+ stringWithContentsOfURL:encoding:error (docs https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/Reference/NSString.html#//apple_ref/occ/clm/NSString/stringWithContentsOfURL:encoding:error:)

在 Objective C 中你可以这样称呼它:

NSString *myURLString = @"http://google.com";
NSURL *myURL = [NSURL URLWithString:myURLString];

NSError *error = nil;
NSString *myHTMLString = [NSString stringWithContentsOfURL:myURL encoding: NSUTF8StringEncoding error:&error];

if (error != nil)
{
    NSLog(@"Error : %@", error);
}
else
{
    NSLog(@"HTML : %@", myHTMLString);
}

所以在 Swift 3 和 4 中,等价的是:

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

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

您可能想要调整编码(请参阅常量 https://developer.apple.com/reference/foundation/nsstringencoding)取决于您的页面使用的编码。


旧答案,Swift 2.2:

let myURLString = "http://google.com"
guard let myURL = NSURL(string: myURLString) else {
    print("Error: \(myURLString) doesn't seem to be a valid URL")
    return
}

do {
    let myHTMLString = try String(contentsOfURL: myURL)
    print("HTML : \(myHTMLString)")
} catch let error as NSError {
    print("Error: \(error)")
}

旧答案,Swift 1.2:

let myURLString = "http://google.com"

if let myURL = NSURL(string: myURLString) {
    var error: NSError?
    let myHTMLString = NSString(contentsOfURL: myURL, encoding: NSUTF8StringEncoding, error: &error)

    if let error = error {
        println("Error : \(error)")
    } else {
        println("HTML : \(myHTMLString)")
    }
} else {
    println("Error: \(myURLString) doesn't seem to be a valid URL")
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 Swift 从 URL 获取 HTML 源代码 的相关文章

  • Swift 3:如何去除UITableView屏幕截图的灰色区域

    我在从桌面视图的屏幕截图中删除灰色区域时遇到了问题 这是我尝试截图时的输出UITableView 实际上我隐藏了一些tableViewCell这是不需要的 可能这就是区域显示灰色的原因 任何帮助表示赞赏 非常感谢 Answer 我通过使用
  • Swift 3 错误:[_SwiftValue pointSize] 无法识别的选择器发送到实例

    我刚刚将我们的项目迁移到 swift 3 发现由于一个问题导致大量崩溃 由于未捕获的异常 NSInvalidArgumentException 而终止应用程序 原因 SwiftValue pointSize 发送到实例的无法识别的选择器 该
  • 自动布局、UIDynamics 和动画

    我对自动布局还很陌生 并且对如何为视图设置动画感到困惑 我读了很多 我知道你必须遵守限制 编辑它 然后包装layoutIfNeeded in an UIView动画块 但当真正要做的时候 我却有点失落 我很乐意有人能向我解释如何做这个动画
  • Swift - 选择值后隐藏 pickerView

    我发现了类似的问题 他们的答案很有帮助 但我坚持最后一件事 我试图在点击字段时显示 pickerView 然后选择数据时 我希望 pickerView 隐藏 我可以从 pickerView 获取数据来隐藏 但是 pickerView 后面仍
  • iOS 11 安全区域布局指南向后兼容性

    启用安全区域布局指南是否与 iOS 11 以下版本兼容 我设法使用新的安全区域布局指南并保持与 iOS 9 和 iOS 10 的向后兼容性 编辑 正如 NickEntin 的评论所指出的 此实现将假定存在状态栏 但在 iPhone X 的横
  • 如何从代码隐藏中设置 CarouselView 的项目?

    我有一个 CarouselView 它绑定到图像的 ItemsSource 但我想通过更改 CarouselView 的索引来更改当前显示的图像 我尝试使用 CarouselView Position 作为必须选择的元素的索引 但不幸的是这
  • 如何请求用户开启定位服务

    我需要我的应用程序来访问用户的当前位置 它在应用程序开始时检查用户是否已设置 如果没有 我需要应用程序显示提示以使其使用位置服务 就像警报视图一样 点击按钮 它应该会带您进入 iPhone 上的位置服务屏幕 您可以通过以下代码检查 loca
  • iOS UIButton 带有圆角和背景 bug

    我发现圆形 UIButton 存在一个奇怪的问题 这是我创建此按钮的代码块 let roundedButton UIButton type System roundedButton frame CGRectMake 100 100 100
  • UISearchController 保留问题

    我正在尝试使用 UISearchController 但是我遇到了无法解决的保留问题 MainTableview 有两个部分 第1节 基于某些正则表达式过滤数据 第2节 All Data 我将 UISearchController 添加到我
  • 将 Xcode 的测试类助理编辑器与 Swift 类结合使用

    在 Xcode 中工作时 在助理编辑器中提取单元测试用例通常会很好 目前 我一直在手动选择测试文件 但我看到助理编辑器有一个选项Test Classes 我试图让这个选项自动提取我的测试文件 但我似乎无法让它工作 是否需要某种配置 它不适用
  • iPhone 快照,包括键盘

    我正在寻找拍摄整个 iPhone 屏幕 包括键盘 的正确方法 我找到了一些截取屏幕的代码 CGRect screenCaptureRect UIScreen mainScreen bounds UIView viewWhereYouWant
  • 如何更改已上传的 Firebase 存储图像文件名?

    我需要更改已上传到 firebase 存储中的文件名 因为 在 firebase 存储中上传图像后 我将 url 保存在 firebase 数据库中的特定子 文件夹 下 但是 当我将图像移动到另一个子 文件夹 时 我需要根据新名称更改存储中
  • 自定义 MKAnnotationView - 如何捕获触摸而不忽略标注?

    我有一个自定义 MKAnnotationView 子类 它完全按照我想要的方式显示视图 在那个视图中 我有一个按钮 我想捕获按钮上的事件来执行操作 这很好用 但是 我不希望标注被忽略或消失 基本上 触摸标注中的按钮将开始播放声音 但我想保留
  • iOS7 中“-webkit-overflow-scrolling: touch” 最初的屏幕外元素被破坏

    既然转基因种子已经发布了 我们现在可以谈谈了 看起来 iOS7 中的 webkit overflow scrolling touch 已损坏 最初不在屏幕上的元素的触摸事件不会触发 或者在某些情况下只是不可靠 这是一个例子
  • xcode 6.1 (Swift) 中的 SIGABRT 运行时错误

    与最初的代码相比 唯一的更改是在ViewControl swift override func viewDidLoad newMessage hidden true super viewDidLoad Do any additional s
  • 应用程序未通过协同设计验证?

    我在提交 iPhone 申请时遇到问题 我看到了一些类似的问题 但没有找到答案 当我存档项目并单击 验证 时 收到错误消息 应用程序未通过协同设计验证 签名无效 或者未使用 Apple 提交证书进行签名 我假设我在协同设计部分做错了什么 我
  • 在 iOS 上从 GPS 获取时间

    我正在开发一个跟踪器应用程序 该应用程序需要高精度地了解设备位置 即它使用位置服务并忽略水平精度低于 20 米的位置 CLLocation没有明确声明是否通过 GPS 确定 但是 如果水平精度为 20 米或更好 则可以认为它是来自 GPS
  • 退出导航控制器

    我试图离开初始视图控制器 并进入空白视图控制器 这很好 但是这会使空白视图控制器也成为导航控制器的一部分 这不是我想要的 我想脱离视图控制器 在视图控制器中 我尝试退出 它会自行弹出 当我尝试视图中的方法时 将出现目标视图控制器 self
  • 如何获取 UIWebView 中元素的位置?

    我在 iPad 程序中加载了 html 的 UIWebView 通过使用 webkit column width 我将 html 分为几列 padding 0px height 1024px webkit column gap 0px we
  • KeyboardAvoidingView - 隐藏键盘时重置高度

    我正在使用 React NativeKeyboardAvoidingView设置我的高度View当显示键盘时 但是当我关闭应用程序中的键盘时 视图的高度不会变回原来的值

随机推荐

  • 是否可以/应该在 Scala 中添加/创建从 T 到 Option[T] 的隐式转换?

    这是一个让事情变得更高效的机会吗 对于程序员来说 我发现将事情包装起来有点烦人Some e g Some 5 像这样的事情怎么样 implicit def T2OptionT x T Option T if x null None else
  • 有没有办法将谷歌地图嵌入到输入的搜索中?

    我试图这样做 当用户在表单中选择一个国家 地区并单击 提交 时 它会将他们重定向到一个包含嵌入式谷歌地图小部件的页面 该小部件也显示他们之前选择的国家 地区 我已尽力解决这个问题 我在网上寻找解决方案 并尝试通过自定义嵌入网址并将国家 地区
  • 当 wsdl 将服务端口绑定定义为 https 和端口 80 时,PHP SOAP 请求失败的解决方法?

    我正在使用 php5 的肥皂扩展来使用 SOAP Web 服务 服务的 wsdl 是使用 Axis java2wsdl 生成的 生成过程中使用的任何选项都会导致端口绑定 url 列出为https xxx xxx xxx xxx 80 如果我
  • ruby 中的“||=”操作数代表什么[重复]

    这个问题在这里已经有答案了 可能的重复 在 Ruby 中是什么意思 https stackoverflow com questions 995593 what does mean in ruby 我这样测试 gt gt a 3 gt 3 g
  • Kotlin 中按钮状态的不同背景

    我的项目中有一个按钮 其工作原理如下 该按钮对于每种状态有 3 种不同的设计 禁用 state enabled false 启用 按下 如果未选择任何文件 此按钮将保持禁用状态 并且具有特定的设计 不过 当选择文件时 此按钮将启用并切换到不
  • Drupal 节点揭秘

    我是 Drupal 的新手 希望了解这个平台的工作原理 具体来说 我对 Node 对象感到困惑 这是什么东西 Content Type是怎么进来的 看起来整个 Drupal 就是节点 节点 节点 很想听听您的见解 当您第一次接触 Drupa
  • 如何使用按位运算符交错 2 个布尔值?

    假设我有两个 4 位值 ABCD and abcd 如何交错它 所以它变成AaBbCcDd 使用按位运算符 伪 C 语言示例 nibble a 0b1001 nibble b 0b1100 char c foo a b print bits
  • 如何从 .rst 文件访问 sphinx conf.py 中的变量?

    我是 Sphinx 和 reStructuredText 的新手 在我的狮身人面像里面conf py我定义 version 0 0 2 代替tutorial rst我想访问version变量和显示0 0 2在我的 html 文件中 我试过
  • sbt 中单个冒号的含义是什么(两个命令之间)

    在使用 sbt 的 travis yml 文件中 我看到了这个 script sbt TRAVIS SCALA VERSION test fastOptJS test fullOptJS 在 sbt 中 我可以运行test 我可以跑fast
  • Drupal Ubercart:多币种?

    将多货币支持集成到 Ubercart 的最安全方法是什么 我找到了这个模块 http drupal org project multicurrency http drupal org project multicurrency但它仍在开发中
  • 使用 iText 从 *.ttf 文件创建字体

    这是我的 Resources class 中的一个方法 public static Font loadFont String fontFileName BaseFont base null try base BaseFont createF
  • XStream 和下划线

    看起来 XStream com thoughtworks xstream gt xstream 1 4 2 正在以一种非常奇怪的方式处理元素和属性名称中的下划线 我需要从客户那里获取并解析其属性中包含下划线的 xml 这是我第一次尝试 XS
  • 使用 Rails 设计首次登录

    如何在自定义会话控制器上确定用户是第一次登录 我希望能够创建会话并重定向到welcome index如果是第一次 否则它将被重定向到root url 我的代码如下 class MysessionsController lt Devise S
  • Java Logger:无法在 logger.properties 文件中设置日志级别

    我有一个使用maven 构建的java 项目 我在用java util logging Logger在我的项目中并想使用logger properties文件 不是命令行 我创建了一个logger properties像这样的文件 hand
  • 如果没有观察到状态,虚拟 DOM 实现与 createDocumentFragment() 有何不同?

    虚拟 DOM 是 DOM 的轻量级副本 在将其插入实际 DOM 之前在本地进行维护 缓存 我们可以根据需要更改它 然后保存到我们真实的 DOM 树中 它使用高效的 diff 算法来来回更新更改和其他用例 这一切都是为了避免直接操作 DOM
  • 使用 API Gateway 处理 AWS Lambda 函数中的错误

    每次我遇到语法错误或者我只想在 AWS Lambda 函数中发送自定义错误时 我都会收到相同的 502 Bad Gateway 响应 内部服务器错误 我尝试了这个简单的代码 module exports saveImage event co
  • 引发了“System.OutOfMemoryException”类型的异常。为什么?

    我有一个动态查询 返回大约 590 000 条记录 第一次运行成功 但再次运行时 我不断收到System OutOfMemoryException 发生这种情况的原因有哪些 错误发生在这里 public static DataSet Get
  • 让 tesseract 只识别数字

    我正在尝试改进我制作的 OCR 程序来读取我正在使用的某个图像的布局 现在 我希望我的 OCR 程序只能识别数字 0 9 我尝试遵循问题的解决方案 限制 tesseract 正在寻找的字符 https stackoverflow com q
  • 更新Cesium回调属性导致实体闪烁

    这是一些可以粘贴到铯沙堡中的代码 它将一个实体添加到地图中 然后每秒更新位置属性的 CallbackProperty 每次更新时实体都会闪烁 var viewer new Cesium Viewer cesiumContainer var
  • 如何使用 Swift 从 URL 获取 HTML 源代码

    我需要查看某个 URL 给出的页面的 HTML 如果我有这个 使用 Swift 获取该 URL 的 HTML 源的最有效和同步的方法是什么 我无法在网上找到一种简洁的方法将其返回到变量中 而不是将其打印在completionHandler