iOS AFNetworking(網路框架)
阿新 • • 發佈:2019-02-08
NSURLConnection
---匯入標頭檔案"AFHTTPRequestOperationManager.h"
1. 傳送GET請求
//傳送get請求 - (void)get { [[AFHTTPRequestOperationManager manager] GET:@"http://127.0.0.1/demo.json" parameters:nil success:^(AFHTTPRequestOperation * _Nonnull operation, id _Nonnull responseObject) { NSLog(@"%@",responseObject); NSLog(@"%@",[responseObject class]); } failure:^(AFHTTPRequestOperation * _Nullable operation, NSError * _Nonnull error) { NSLog(@"%@",error); }]; }
2. 傳送GET請求--帶引數
//傳送get請求,傳引數 - (void)get { [[AFHTTPRequestOperationManager manager] GET:@"http://127.0.0.1/php/login.php" parameters:@{@"username":@"abc",@"password":@"123"} success:^(AFHTTPRequestOperation * _Nonnull operation, id _Nonnull responseObject) { NSLog(@"%@",responseObject); } failure:^(AFHTTPRequestOperation * _Nullable operation, NSError * _Nonnull error) { NSLog(@"%@",error); }]; }
3. 傳送POST請求
//演示post請求 - (void)post { [[AFHTTPRequestOperationManager manager] POST:@"http://127.0.0.1/php/login.php" parameters:@{@"username":@"abcd",@"password":@"lalala"} success:^(AFHTTPRequestOperation * _Nonnull operation, id _Nonnull responseObject) { NSLog(@"%@",responseObject); } failure:^(AFHTTPRequestOperation * _Nullable operation, NSError * _Nonnull error) { NSLog(@"%@",error); }]; }
4. 上傳檔案
- (void)post {
//獲取要上傳檔案的路徑
NSURL *url1 = [[NSBundle mainBundle] URLForResource:@"06.jpg" withExtension:nil];
NSURL *url2 = [[NSBundle mainBundle] URLForResource:@"01.jpg" withExtension:nil];
[[AFHTTPRequestOperationManager manager] POST:@"http://127.0.0.1/php/upload/upload-m.php" parameters:@{@"username":@"zhangsan"} constructingBodyWithBlock:^(id<AFMultipartFormData> _Nonnull formData) {
//上傳檔案
[formData appendPartWithFileURL:url1 name:@"userfile[]" error:nil];
[formData appendPartWithFileURL:url2 name:@"userfile[]" error:nil];
} success:^(AFHTTPRequestOperation * _Nonnull operation, id _Nonnull responseObject) {
NSLog(@"%@",responseObject);
} failure:^(AFHTTPRequestOperation * _Nullable operation, NSError * _Nonnull error) {
NSLog(@"%@",error);
}];
}
NSURLSession
---匯入標頭檔案"AFHTTPSessionManager.h"
1. 傳送GET請求
- (void)get {
[[AFHTTPSessionManager manager] GET:@"http://127.0.0.1/demo.json" parameters:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nonnull responseObject) {
NSLog(@"%@",responseObject);
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
NSLog(@"%@",error);
}];
}
2. 下載任務
- (void)download {
NSURL *url = [NSURL URLWithString:@"http://127.0.0.1/abc.hm"];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
//進度
NSProgress *progress = nil;
[[[AFHTTPSessionManager manager] downloadTaskWithRequest:request progress:&progress destination:^NSURL * _Nonnull(NSURL * _Nonnull targetPath, NSURLResponse * _Nonnull response) {
// NSLog(@"targetPath -- %@",targetPath);
NSString *path = [[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:response.suggestedFilename];
// 本地檔案的URL必須使用這種方式獲取
NSURL *url = [[NSURL alloc] initFileURLWithPath:path];
//返回要儲存檔案的路徑
return url;
} completionHandler:^(NSURLResponse * _Nonnull response, NSURL * _Nullable filePath, NSError * _Nullable error) {
NSLog(@"%@",filePath);
}] resume];
//觀察progress的某個屬性fractionCompleted(進度)是否發生變化
//KVO
[progress addObserver:self forKeyPath:@"fractionCompleted" options:NSKeyValueObservingOptionNew context:nil];
}
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSString *,id> *)change context:(void *)context {
if ([object isKindOfClass:[NSProgress class]]) {
// NSLog(@"%@",change);
NSProgress *progress = object;
NSLog(@"%@",progress.localizedDescription);
NSLog(@"%@",progress.localizedAdditionalDescription);
NSLog(@"completedUnitCount : %zd",progress.completedUnitCount);
NSLog(@"totalUnitCount : %zd",progress.totalUnitCount);
NSLog(@"fractionCompleted : %f",progress.fractionCompleted);
//回到主執行緒更新UI
NSLog(@"%@",[NSThread currentThread]);
}
}
3. 獲取網頁資料--修改預設的序列化器
- (void)getBaidu {
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
//修改響應的序列化器
manager.responseSerializer = [AFHTTPResponseSerializer serializer];
[manager GET:@"http://www.baidu.com" parameters:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nonnull responseObject) {
NSString *html = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];
NSLog(@"%@",html);
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
NSLog(@"%@",error);
}];
}
4. 解析XML
- (void)getXML {
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
// 設定序列號器為XML,也可修改為AFHTTPResponseSerializer,使用第三方框架解析二進位制資料
manager.responseSerializer = [AFXMLParserResponseSerializer serializer];
[manager GET:@"http://127.0.0.1/videos.xml" parameters:nil success:^(NSURLSessionDataTask * _Nonnull task, NSXMLParser *responseObject) {
//解析xml
responseObject.delegate = self;
[responseObject parse];
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
NSLog(@"%@",error);
}];
}
//NSXMLParser 的代理方法
- (void)parserDidStartDocument:(NSXMLParser *)parser {
NSLog(@"1 開始解析");
}
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary<NSString *,NSString *> *)attributeDict {
NSLog(@"2 開始節點 %@ %@",elementName,attributeDict);
}
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {
NSLog(@"3 節點之間的內容 %@",string);
}
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {
NSLog(@"4 結束節點 %@",elementName);
}
- (void)parserDidEndDocument:(NSXMLParser *)parser {
NSLog(@"5 結束解析");
}
- (void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError {
NSLog(@"6 錯誤");
}