- (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 上传文件
必须按照格式写,一个空格或者回车都不能多。 // 一定要注意这个格式是固定的
/* 文件参数格式
--分割线\r\n
Content-Disposition: form-data; name="file"; filename="文件名"\r\n
Content-Type: 文件的MIMEType\r\n
\r\n
文件数据
\r\n
// 结束标记
\r\n
--分割线--\r\n
\r\n
*/
// 主要是参数第二个参数要传入 **`请求体`**
[[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];
}