8

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

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

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

感谢任何人帮助我!

4

3 回答 3

2

看来您正在追求类似的东西,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

于 2013-10-27T08:33:09.957 回答
1

您可以通过自定义 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 中,协议可以注册到特定的 NSURLSessions;对于这些,我认为全局注册的协议处理程序不会拦截。)

于 2013-10-31T22:01:59.823 回答
1

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

于 2013-10-27T09:05:18.583 回答