zoukankan      html  css  js  c++  java
  • 网络-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];

  • 相关阅读:
    线程
    实数四则运算表达式的计算,C++ 实现
    [Compiling Principles] LEX基本功能的实现
    2010年ImagineCup,我们共同走过
    [WPF] Felix 的线程学习笔记(一)——从Win32的消息循环说起
    [WPF] Felix 的线程学习笔记(二)——从WPF入手,实现简单的多线程
    [ASP] asp 中的ajax使用
    银行家算法C++实现
    [ASP.NET] 事件与委托的处理
    小郁闷
  • 原文地址:https://www.cnblogs.com/bluceZ/p/4629500.html
Copyright © 2011-2022 走看看