网络-HTTP其他常见方法

HTTP其他常见方法:

GET 获取指定资源

POST 2M 向指定资源提交数据进行处理请求,在RESTful风格中用于新增资源

HEAD 获取指定资源头部信息

PUT 替换指定资源(不支持浏览器操作)

DELETE 删除指定资源

 

OPTIONS 允许客户端查看服务器的性能

TRACE 回显服务器收到的请求,主要用于测试或诊断

CONNECT 预留给能够将连接改为管道方式的代理服务器(HTTP代理使用)

 

提示:

鉴于安全方面的考虑,服务器大多不会开放所有的HTTP请求方法

PUT和DELETE目前在国内使用不多,大多由POST取代,但是在iOS开发中PUT是最简单的实现文件上传的方式

HTTP HEAD方法:

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:0 timeoutInterval:kTimeout];

request.HTTPMethod = @"HEAD";

[NSURLConnection sendAsynchronousRequest:request queue:self.myQueue completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {

    NSLog(@"%@", response);

    NSLog(@"---------------");

    NSLog(@"%@", data);

}];

运行测试代码可以发现,HEAD方法只是返回资源信息,而不会返回数据体

应用场景:

获取资源Mimetype

获取资源文件大小,用于断点续传或多线程下载

 

HTTP Range的示例

通过设置Range可以指定每次从网路下载数据包的大小

Range示例

bytes=0-499 从0到499的头500个字节

bytes=500-999 从500到999的第二个500字节

bytes=500- 从500字节以后的所有字节

 

bytes=-500 最后500个字节

bytes=500-599,800-899 同时指定几个范围

Range小结

- 用于分隔

前面的数字表示起始字节数

后面的数组表示截止字节数,没有表示到末尾

, 用于分组,可以一次指定多个Range,不过很少用

将数据写入文件

// 打开缓存文件

NSFileHandle *fp = [NSFileHandle fileHandleForWritingAtPath:self.cachePath];

// 如果文件不存在,直接写入数据

if (!fp) {

    [data writeToFile:self.cachePath atomically:YES];

} else {

    // 移动到文件末尾

    [fp seekToEndOfFile];

    // 将数据文件追加到文件末尾

    [fp writeData:data];

    // 关闭文件句柄

    [fp closeFile];

}

检查文件大小

// 判断文件是否存在

if ([[NSFileManager defaultManager] fileExistsAtPath:self.cachePath]) {

    NSDictionary *dict = [[NSFileManager defaultManager] attributesOfItemAtPath:self.cachePath error:NULL];

    return [dict[NSFileSize] longLongValue];

} else {

    return 0;

}

 

提示:由于数据是追加的,为了避免重复从网络下载文件,在下载之前

判断缓存路径中文件是否已经存在

如果存在检查文件大小

如果文件大小与网络资源大小一致,则不再下载

第三方解压缩框架——SSZipArchive

下载地址:https://github.com/samsoffes/ssziparchive

注意:需要引入libz.dylib框架 

// Unzipping

NSString *zipPath = @"path_to_your_zip_file";

NSString *destinationPath = @"path_to_the_folder_where_you_want_it_unzipped";

[SSZipArchive unzipFileAtPath:zipPath toDestination:destinationPath];

 

// Zipping

NSString *zippedPath = @"path_where_you_want_the_file_created";

NSArray *inputPaths = [NSArray arrayWithObjects:

                       [[NSBundle mainBundle] pathForResource:@"photo1" ofType:@"jpg"],

                       [[NSBundle mainBundle] pathForResource:@"photo2" ofType:@"jpg"]

                       nil];

[SSZipArchive createZipFileAtPath:zippedPath withFilesAtPaths:inputPaths];

posted @ 2015-07-08 10:41  树籽  阅读(276)  评论(0编辑  收藏  举报