【问题标题】:Download entire webpage in iOS WITHOUT using ASIHTTPRequest在不使用 ASIHTTPRequest 的情况下在 iOS 中下载整个网页
【发布时间】:2013-11-03 11:47:21
【问题描述】:

在 ASIHTTPRequest 库中是否有 ASIWebPageRequest 的替代品,我可以使用它来下载 iOS 中的整个网页,包括 CSS、JavaScript 和图像文件等?我似乎在 AFNetworking 框架中找不到类似的类,到目前为止我的搜索还没有成功。我不能使用 ASIHTTPRequest,因为我似乎根本无法让它在我的任何应用程序中工作,我没有找到适用于 iOS7 的示例,无论如何我宁愿使用更新的东西。

我基本上想将整个网页本地存储在 iPhone/iPad 上的目录中,以便用户可以在本地对其进行编辑并稍后将整个目录发送到他们的 Web 服务器。用户还需要能够随时在 UIWebView 中查看网页。

如果这不可能,我只需要下载 HTML 文件,然后对其进行解析以找到外部资源的 URL,然后单独下载它们。我宁愿不这样做,但如果我必须这样做,那么实现这一目标的最佳库是什么?

感谢任何帮助我的人!

【问题讨论】:

标签: ios objective-c uiwebview afnetworking asihttprequest


【解决方案1】:

您似乎在追求类似wget 的东西,但我不确定您是否可以在 iOS 中做到这一点。

您可以使用本机方法NSString stringWithContentsOfURL:encoding:error: 来获取网页的 HTML。

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

【讨论】:

  • 没有获得外部资源文件,如 css 或图像或者 AFAICS .. 所以 -1 因为它没有帮助。
  • 它也阻塞了线程,我认为阻塞的一切都是坏的。 (即使您在 bg 中执行此操作,它也会阻塞但没关系。所以不要阻塞 UI!)
  • @Daij-Djan 感谢您指出这一点。在他的问题结束时,OP 询问获取 HTML 文件的方法,这正是 stringWithContentsOfURL 所做的。
  • 撤回了投票。我讨厌改变意思的问题:)我倾向于不读到最后:D
【解决方案2】:

我会使用 UIWebView 并缓存它发出的所有请求

【讨论】:

  • 如果你能提供一些有效的示例代码,那么赏金就是你的了。
  • 抱歉,不要再放了:/
【解决方案3】:

您可以通过自定义 NSURLProtocol 拦截从您的应用发出的所有 HTTP 请求。您必须扩展这个概念,但这里有一个简单的类,当放入您的项目时,它将注销所有正在发出的请求(例如来自 UIWebView)。

@interface TSHttpLoggingURLProtocol : NSURLProtocol
@end

@implementation TSHttpLoggingURLProtocol

+ (void) load
{
    [NSURLProtocol registerClass: self];
}

+ (BOOL) canInitWithRequest: (NSURLRequest *) request
{
    NSLog( @"%@", request.URL );

    return NO;
}

@end

您可以对此进行扩展并实际执行来自协议实现的请求(有关更完整的示例,请参阅https://github.com/rnapier/RNCachingURLProtocol)。或者您可以只跟踪请求并稍后自行下载。

据我所知,将这样的协议处理程序与 UIWebView 的特定实例关联起来并不容易。您将使用此拦截应用程序中的所有请求。 (警告 - 在 iOS7 中,协议可以注册到特定的 NSURLSession;对于这些,我认为全局注册的协议处理程序不会拦截。)

【讨论】:

    猜你喜欢
    • 2012-08-05
    • 2011-09-22
    • 1970-01-01
    • 2020-12-08
    • 2013-05-17
    • 2013-11-21
    • 1970-01-01
    • 1970-01-01
    • 2013-06-21
    相关资源
    最近更新 更多