zoukankan      html  css  js  c++  java
  • The resource could not be loaded because the App Transport Security policy requires the use of a secure connection

    xmpp 项目中遇到的问题,用苹果的通信API 写一个PUT 方法,向服务器上传一张图片。遇到如题问题。

    Plist 文件没有NSAppTransportSecurity属性 Dic,添加该属性,再添加二级属性NSAllowsArbitraryLoads BOOL  YES

    苹果文档:https://developer.apple.com/library/ios/documentation/General/Reference/InfoPlistKeyReference/Articles/CocoaKeys.html

    stackOverflow:http://stackoverflow.com/questions/32631184/the-resource-could-not-be-loaded-because-the-app-transport-security-policy-requi

    工具类:HTTPTool.h

     1 #import <Foundation/Foundation.h>
     2 
     3 typedef void (^HttpToolProgressBlock)(CGFloat progress);
     4 typedef void (^HttpToolCompletionBlock)(NSError *error);
     5 
     6 
     7 
     8 @interface HttpTool : NSObject
     9 
    10 -(void)uploadData:(NSData *)data
    11               url:(NSURL *)url
    12     progressBlock : (HttpToolProgressBlock)progressBlock
    13             completion:(HttpToolCompletionBlock) completionBlock;
    14 
    15 /**
    16  下载数据
    17  */
    18 -(void)downLoadFromURL:(NSURL *)url
    19         progressBlock : (HttpToolProgressBlock)progressBlock
    20             completion:(HttpToolCompletionBlock) completionBlock;
    21 
    22 
    23 -(NSString *)fileSavePath:(NSString *)fileName;
    24 
    25 @end

    HTTPTool.m

      1 #import "HttpTool.h"
      2 
      3 #define kTimeOut 5.0
      4 
      5 
      6 @interface HttpTool()<NSURLSessionDownloadDelegate,NSURLSessionTaskDelegate>{
      7 
      8     //下载
      9     HttpToolProgressBlock _dowloadProgressBlock;
     10     HttpToolCompletionBlock _downladCompletionBlock;
     11     NSURL *_downloadURL;
     12     
     13     
     14     //上传
     15     HttpToolProgressBlock _uploadProgressBlock;
     16     HttpToolCompletionBlock _uploadCompletionBlock;
     17 
     18 }
     19 
     20 @end
     21 
     22 
     23 @implementation HttpTool
     24 
     25 
     26 #pragma mark - 上传
     27 -(void)uploadData:(NSData *)data url:(NSURL *)url progressBlock:(HttpToolProgressBlock)progressBlock completion:(HttpToolCompletionBlock)completionBlock{
     28     
     29     NSAssert(data != nil, @"上传数据不能为空");
     30     NSAssert(url != nil, @"上传文件路径不能为空");
     31     
     32     _uploadProgressBlock = progressBlock;
     33     _uploadCompletionBlock = completionBlock;
     34     
     35     NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:kTimeOut];
     36     request.HTTPMethod = @"PUT";
     37     
     38     NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration];
     39     
     40     //NSURLSessionDownloadDelegate
     41     NSURLSession *session = [NSURLSession sessionWithConfiguration:config delegate:self delegateQueue:[[NSOperationQueue alloc] init]];
     42     
     43     
     44     //定义下载操作
     45     NSURLSessionUploadTask *uploadTask = [session uploadTaskWithRequest:request fromData:data];
     46     
     47     [uploadTask resume];
     48 }
     49 
     50 #pragma mark - 上传代理
     51 
     52 
     53 #pragma mark - 上传进度
     54 -(void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didSendBodyData:(int64_t)bytesSent totalBytesSent:(int64_t)totalBytesSent totalBytesExpectedToSend:(int64_t)totalBytesExpectedToSend{
     55 
     56     if (_uploadProgressBlock) {
     57         CGFloat progress = (CGFloat) totalBytesSent / totalBytesExpectedToSend;
     58         _uploadProgressBlock(progress);
     59     }
     60 }
     61 
     62 
     63 #pragma mark - 上传完成
     64 -(void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error{
     65     if (_uploadCompletionBlock) {
     66         _uploadCompletionBlock(error);
     67         
     68         _uploadProgressBlock = nil;
     69         _uploadCompletionBlock = nil;
     70     }
     71 }
     72 
     73 
     74 #pragma mark - 下载
     75 -(void)downLoadFromURL:(NSURL *)url
     76          progressBlock:(HttpToolProgressBlock)progressBlock
     77             completion:(HttpToolCompletionBlock)completionBlock{
     78     
     79   
     80     
     81     NSAssert(url != nil, @"下载URL不能传空");
     82     
     83     _downloadURL = url;
     84     _dowloadProgressBlock = progressBlock;
     85     _downladCompletionBlock = completionBlock;
     86     
     87     
     88     
     89     NSURLRequest *request = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:kTimeOut];
     90     
     91     
     92     //session 大多数使用单例即可
     93     
     94     NSURLResponse *response = nil;
     95     
     96     
     97     //发达同步请求
     98     [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:nil];
     99     
    100     //NSLog(@"%lld",response.expectedContentLength);
    101     if (response.expectedContentLength <= 0) {
    102         if (_downladCompletionBlock) {
    103             NSError *error =[NSError errorWithDomain:@"文件不存在" code:404 userInfo:nil];
    104             _downladCompletionBlock(error);
    105             
    106             //清除block
    107             _downladCompletionBlock = nil;
    108             _dowloadProgressBlock = nil;
    109         }
    110         
    111         return;
    112     }
    113     
    114 
    115     NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration];
    116     
    117     
    118     //NSURLSessionDownloadDelegate
    119     NSURLSession *session = [NSURLSession sessionWithConfiguration:config delegate:self delegateQueue:[[NSOperationQueue alloc] init]];
    120     
    121     
    122     //定义下载操作
    123     NSURLSessionDownloadTask *downloadTask = [session downloadTaskWithRequest:request];
    124     
    125     [downloadTask resume];
    126 
    127 }
    128 
    129 
    130 #pragma mark -NSURLSessionDownloadDelegate
    131 #pragma mark 下载完成
    132 -(void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didFinishDownloadingToURL:(NSURL *)location{
    133 
    134     //图片保存在沙盒的Doucument下
    135     NSString *fileSavePath = [self fileSavePath:[_downloadURL lastPathComponent]];
    136     
    137     //文件管理
    138     NSFileManager *fileManager = [NSFileManager defaultManager];
    139     [fileManager copyItemAtURL:location toURL:[NSURL fileURLWithPath:fileSavePath] error:nil];
    140     
    141     if (_downladCompletionBlock) {
    142         //通知下载成功,没有没有错误
    143         _downladCompletionBlock(nil);
    144         
    145         //清空block
    146         _downladCompletionBlock = nil;
    147         _dowloadProgressBlock = nil;
    148     }
    149 
    150 }
    151 
    152 #pragma mark 下载进度
    153 -(void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didWriteData:(int64_t)bytesWritten totalBytesWritten:(int64_t)totalBytesWritten totalBytesExpectedToWrite:(int64_t)totalBytesExpectedToWrite{
    154     
    155     
    156     if (_dowloadProgressBlock) {
    157         //已写数据字节数除以总字节数就是下载进度
    158         CGFloat progress = (CGFloat)totalBytesWritten / totalBytesExpectedToWrite;
    159         
    160         _dowloadProgressBlock(progress);
    161 
    162     }
    163 }
    164 
    165 
    166 -(void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didResumeAtOffset:(int64_t)fileOffset expectedTotalBytes:(int64_t)expectedTotalBytes{
    167     
    168 }
    169 
    170 
    171 #pragma mark -传一个文件名,返回一个在沙盒Document下的文件路径
    172 -(NSString *)fileSavePath:(NSString *)fileName{
    173     NSString *document = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];
    174     //图片保存在沙盒的Doucument下
    175     return [document stringByAppendingPathComponent:fileName];
    176 }
    177 
    178 @end
    View Code
  • 相关阅读:
    搭建kafka集群
    fluentd 安装、配置、使用介绍
    彻底解决 es 的 unassigned shards 症状
    nginx 反向代理时丢失端口的解决方案
    kubernetes的imagePullSecrets如何生成及使用
    创建MySQL数据库账号
    Linux中查找文件
    Linux快速访问多个目录
    Django查询数据库返回字典dict数据
    linux 将压缩包复制到另外一个文件夹下面
  • 原文地址:https://www.cnblogs.com/wjw-blog/p/5640622.html
Copyright © 2011-2022 走看看