标签:
Mac OS
& iOS
设计的一套网络框架NSURLConnection
和 NSURLSession
做了封装https://github.com/AFNetworking/AFNetworking
$ git clone https://github.com/AFNetworking/AFNetworking.git
# 更新框架
$ git pull
分支
是学习第三方框架和入手公司项目的重要手段!类型 | 说明 |
---|---|
AFHTTPRequestSerializer |
二进制的,默认的 |
AFJSONRequestSerializer |
JSON(POST JSON) RESTful 设计风格需要 |
AFPropertyListRequestSerializer |
PList(POST Plist-开发中几乎不用) |
AFURLResponseSerialization
类型 | 说明 |
---|---|
AFHTTPResponseSerializer |
HTTP 二进制的 |
AFJSONResponseSerializer |
JSON 默认的 |
AFXMLParserResponseSerializer |
XML Parser 解析器 SAX 解析 |
AFXMLDocumentResponseSerializer |
(Mac OS X) XML DOM |
AFPropertyListResponseSerializer |
PList 几乎不用 |
AFImageResponseSerializer |
图像,不支持 GIF |
AFCompoundResponseSerializer |
组合的 |
XML 格式
SAX
解析,需要指定格式
mgr.responseSerializer = [AFXMLParserResponseSerializer serializer];
然后利用代理方法解析
如果 DOM 解析,需要指定格式
mgr.responseSerializer = [AFHTTPResponseSerializer serializer];
图像
SDWebImage
非常像!GIF
error
state code == 200
,就是数据格式错误,针对具体格式进行设置即可以下连接是移动开发中,常见的 XML 数据格式
http://flash.weather.com.cn/wmaps/xml/china.xml
NSURLCache *URLCache = [[NSURLCache alloc] initWithMemoryCapacity:4 * 1024 * 1024 diskCapacity:20 * 1024 * 1024 diskPath:nil];
[NSURLCache setSharedURLCache:URLCache];
[[AFNetworkActivityIndicatorManager sharedManager] setEnabled:YES];
AFAppDotNetAPIClient
提供全局网络访问入口
.h
@interface AFAppDotNetAPIClient : AFHTTPSessionManager
+ (instancetype)sharedClient;
@end
static NSString * const AFAppDotNetAPIBaseURLString = @"https://api.app.net/";
@implementation AFAppDotNetAPIClient
+ (instancetype)sharedClient {
static AFAppDotNetAPIClient *_sharedClient = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
_sharedClient = [[AFAppDotNetAPIClient alloc] initWithBaseURL:[NSURL URLWithString:AFAppDotNetAPIBaseURLString]];
_sharedClient.securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeNone];
});
return _sharedClient;
}
@end
AppDelegate
中设置缓存AppDelegate
中设置网络访问指示器AFHTTPSessionManager
创建单例统一管理网络访问BaseURL
,设置后,再访问该服务器,可以直接使用相对路径- (void)postLogin {
AFHTTPRequestOperationManager *mgr = [AFHTTPRequestOperationManager manager];
NSDictionary *params = @{@"username": @"张三&李四", @"password": @"123"};
[mgr POST:@"http://localhost/login.php" parameters:params success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"POST Login %@", responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"%@", error);
}];
}
- (void)getLogin2 {
AFHTTPRequestOperationManager *mgr = [AFHTTPRequestOperationManager manager];
NSDictionary *params = @{@"username": @"张三&李四", @"password": @"123"};
[mgr GET:@"http://localhost/login.php" parameters:params success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"GET Login %@", responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"%@", error);
}];
}
- (void)getLogin1 {
AFHTTPRequestOperationManager *mgr = [AFHTTPRequestOperationManager manager];
[mgr GET:@"http://localhost/login.php?username=zhangsan&password=123" parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"%@", responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"%@", error);
}];
}
- (void)getDemo {
AFHTTPRequestOperationManager *mgr = [AFHTTPRequestOperationManager manager];
[mgr GET:@"http://localhost/demo.json" parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"%@ %@ %@", responseObject, [responseObject class], [NSThread currentThread]);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"%@", error);
}];
}
URL
,直接使用 URL
字符串JSON
的反序列化URL
的参数可以使用 `字典的形式拼接,程序员不在需要考虑
url` 的格式HTTP
方法,只需要挑选单词即可!tools.responseSerializer = [AFXMLParserResponseSerializer serializer];
tools.responseSerializer =[AFHTTPResponseSerializer serializer];
NetworkTools *tools = [NetworkTools sharedNetworkTools];
NSDictionary *params = @{@"city": @[@"bj", @"sh", @"gz"]};
[tools GET:@"weather.php" parameters:params success:^(NSURLSessionDataTask *task, id responseObject) {
NSLog(@"%@", responseObject);
} failure:^(NSURLSessionDataTask *task, NSError *error) {
NSLog(@"%@", error);
}];
- (void)putupload {
NetworkTools *tools = [NetworkTools sharedNetworkTools];
NSString *urlString = @"http://localhost/uploads/321.png";
NSURL *url = [NSURL URLWithString:urlString];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
request.HTTPMethod = @"PUT";
NSURL *fileURL = [[NSBundle mainBundle] URLForResource:@"001.png" withExtension:nil];
NSProgress *progress = nil;
[[tools uploadTaskWithRequest:request fromFile:fileURL progress:&progress completionHandler:^(NSURLResponse *response, id responseObject, NSError *error) {
NSLog(@"%@ %@", response, responseObject);
}] resume];
// KVO
[progress addObserver:self forKeyPath:@"completedUnitCount" options:NSKeyValueObservingOptionNew context:nil];
}
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
if ([object isKindOfClass:[NSProgress class]]) {
NSProgress *progress = object;
NSLog(@"%@ - %@ - %f", progress.localizedDescription, progress.localizedAdditionalDescription, progress.fractionCompleted);
}
}
[tools.reachabilityManager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
NSLog(@"%zd", status);
switch (status) {
case AFNetworkReachabilityStatusNotReachable:
NSLog(@"没有连接");
break;
case AFNetworkReachabilityStatusReachableViaWiFi:
NSLog(@"WI-FI");
break;
case AFNetworkReachabilityStatusReachableViaWWAN:
NSLog(@"3G");
break;
default:
NSLog(@"未知");
break;
}
}];
[tools.reachabilityManager startMonitoring];
标签:
原文地址:http://www.cnblogs.com/donghaoios/p/5090797.html