在iOS中下载整个网页,不使用ASIHTTPRequest

时间:2013-10-24 16:29:42

标签: ios objective-c uiwebview afnetworking asihttprequest

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

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

如果无法做到这一点,我只需下载HTML文件,然后解析它以查找外部资源的URL,然后单独下载。我宁愿不这样做,但是如果我必须那么什么是最好的图书馆来完成这个?

感谢任何人帮助我!

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

我使用UIWebView并缓存它所做的所有请求

答案 2 :(得分: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;对于这些我认为全局注册的协议处理程序不会拦截。)