- (void)GET{ // GET AFHTTPSessionManager *mgr = [AFHTTPSessionManager manager]; // 将数据作为参数传入 NSDictionary *dict = @{ @"username":@"12", @"pwd":@"13" }; [mgr GET:[NSString stringWithFormat:@"http://123.123.123.123/login"] parameters:dict success:^(NSURLSessionDataTask *task, id responseObject) { NSLog(@"success:%@",responseObject); } failure:^(NSURLSessionDataTask *task, NSError *error) { NSLog(@"failure:%@",error); }]; }- (void)POST{ // POST AFHTTPSessionManager *mgr = [AFHTTPSessionManager manager]; // 将数据作为参数传入 NSDictionary *dict = @{ @"username":@"12",@"pwd":@"13" }; [mgr POST:[NSString stringWithFormat:@"http://123.123.123.123/login"] parameters:dict success:^(NSURLSessionDataTask *task, id responseObject) { NSLog(@"success:%@",responseObject); } failure:^(NSURLSessionDataTask *task, NSError *error) { NSLog(@"failure:%@",error); }]; }
文件上传:appendPartWithFileData: - (void)upload { // 文件上传 AFHTTPSessionManager *mgr = [AFHTTPSessionManager manager]; // 将数据作为参数传入 [mgr POST:@"http://123.123.123.123/upload" parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> formData) { // formdata 为要上传的数据 [formData appendPartWithFileData:[NSData dataWithContentsOfFile:@"/Users/song/Desktop/test.png"] name:@"file" fileName:@"wer.png" mimeType:@"image/png"]; } success:^(NSURLSessionDataTask *task, id responseObject) { NSLog(@"success:%@",responseObject); } failure:^(NSURLSessionDataTask *task, NSError *error) { NSLog(@"failure:%@",error); }]; }
NSURLSession 上传文件 必须按照格式写,一个空格或者回车都不能多。 // 一定要注意这个格式是固定的 /* 文件参数格式 --分割线 Content-Disposition: form-data; name="file"; filename="文件名" Content-Type: 文件的MIMEType 文件数据 // 结束标记 --分割线-- */ // 主要是参数第二个参数要传入 **`请求体`** [[self.session uploadTaskWithRequest:request fromData:body completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) { NSLog(@"---%@",[NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil]); }] resume];
文件下载 下载文件需要返回一个保存路径,还需要手动启动resume - (void)download { // 下载 AFHTTPSessionManager *mgr = [AFHTTPSessionManager manager]; [[mgr downloadTaskWithRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://123.123.123.123/resources/images/minion_02.png"]] progress:nil destination:^NSURL *(NSURL *targetPath, NSURLResponse *response) { // 下载文件需要返回一个保存路径,还需要手动启动resume NSString *path = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)[0]; return [NSURL fileURLWithPath:[path stringByAppendingPathComponent:response.suggestedFilename]]; } completionHandler:^(NSURLResponse *response, NSURL *filePath, NSError *error) { NSLog(@"%@",filePath.path); }] resume]; }
默认是解析json,如果想解析xml,需要指定管理器的解析器为xml 如果解析其他类型的文件,就将responseSerializer属性设置为ADHTTPResonseSericlizer,服务器返回什么就接受什么类型的数据。 -(void)returnType { // 默认返回的数据时JSON,如果想返回XML,设置属性responseSerializer // 如果想返回服务器上文件本来的类型,设置AFHTTPResponseSerializer AFHTTPSessionManager *mgr = [AFHTTPSessionManager manager]; // responseSerializer 用来解析服务器返回的数据 mgr.responseSerializer = [AFHTTPResponseSerializer serializer]; // 直接使用“服务器本来返回的数据”,不做任何解析 // 告诉AFN,以XML形式解析服务器返回的数据 // mgr.responseSerializer = [AFXMLParserResponseSerializer serializer]; // 将数据作为参数传入 [mgr GET:[NSString stringWithFormat:@"http://123.123.123.123/resources/images/minion_02.png"] parameters:nil success:^(NSURLSessionDataTask *task,id response) { NSLog(@"success:%zd",[response length]); } failure:^(NSURLSessionDataTask *task, NSError *error) { NSLog(@"failure:%@",error); }];}
手机联网状态 - 手机联网状态:`AFNetWorkReachabityManager` - 苹果自带:`Reachability` , 通过通知监听系统状态手机联网状态:AFNetWorkReachabityManager /* typedef NS_ENUM(NSInteger, AFNetworkReachabilityStatus) { AFNetworkReachabilityStatusUnknown = -1, // 未知 AFNetworkReachabilityStatusNotReachable = 0, // 未联网 AFNetworkReachabilityStatusReachableViaWWAN = 1, // 蜂窝网络 AFNetworkReachabilityStatusReachableViaWiFi = 2, // wifi }; */ - (void)monitor { // 监控网络状态 AFNetworkReachabilityManager *mgr = [AFNetworkReachabilityManager sharedManager]; // 网络状态改变就会调用这个block [mgr setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) { NSLog(@"网络状态改变:%zd",status); }]; // 打开监听器 [mgr startMonitoring]; }
手机联网状态:Reachability /* typedef enum : NSInteger { NotReachable = 0, // 网络不可知 ReachableViaWiFi, // WIFI ReachableViaWWAN // 移动网络 } NetworkStatus; */ 手机的状态改变,会给系统发送通知,所以可以添加监听器,接收这个通知。/**通知*/ @property (nonatomic, strong) Reachability *reach; - (void)viewDidLoad { [super viewDidLoad]; // 添加通知 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(getNetworkStatus) name:kReachabilityChangedNotification object:nil]; // 接收通知 self.reach = [Reachability reachabilityForInternetConnection]; [self.reach startNotifier]; } - (void)getNetworkStatus { // 获取手机网络状态 if([Reachability reachabilityForLocalWiFi].currentReachabilityStatus != NotReachable){ NSLog(@"wifi"); } else if([Reachability reachabilityForInternetConnection].currentReachabilityStatus != NotReachable) { NSLog(@"3G?4G"); } else { NSLog(@"Nothing at all!"); } } - (void)dealloc { // 停止监听器 [self.reach startNotifier]; // 移除通知 [[NSNotificationCenter defaultCenter] removeObserver:self name:kReachabilityChangedNotification object:nil]; }