這篇是關於網路請求的,結合公司的實際情況編寫,如果有不同意見歡迎留言共同討論。 iOS在9.0之後徹底放棄了NSURLConnection,現在已經改用了NSURLSession進行網路請求。一般現在網路請求也都是使用AFNetworking。下麵就把我自己關於afn和系統的api使用寫下來。 一.
這篇是關於網路請求的,結合公司的實際情況編寫,如果有不同意見歡迎留言共同討論。
iOS在9.0之後徹底放棄了NSURLConnection,現在已經改用了NSURLSession進行網路請求。一般現在網路請求也都是使用AFNetworking。下麵就把我自己關於afn和系統的api使用寫下來。
一.使用NSURLSession
移動端的網路請求主要是get請求和post請求, get和post請求步驟差不多,只不過post對於信息的傳送更安全,post請求會設置body而且會對body進行加密,保證傳輸的信息安全。
NSString *urlString = BASE_PERSONAL_URL; // 設置請求網址
NSURL *url = [NSURL URLWithString:urlString];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; // 創建請求
// 參數拼接
NSDictionary *bodyDic = @{@"password": md5Password, @"os": @"2", @"version": strSysVersion, @"models": phoneModel};
NSArray *body = @[bodyDic];
NSDictionary *parameter = @{@"head":head, @"body":body};
request.HTTPMethod = @"Post"; // 設置請求方式
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; // 設置請求頭,返回類型
NSLog(@"parameter ==== %@", parameter);
NSData *data = [NSJSONSerialization dataWithJSONObject:parameter options:NSJSONWritingPrettyPrinted error:nil];
// 因為需要對body體進行加密所以先把data轉化成字元串,如果不加密可略過次步
NSString *bodyString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSData *bodyData = [[Base getHTTPBodyString:bodyString] dataUsingEncoding:NSUTF8StringEncoding]; // 對body體進行加密
request.HTTPBody = bodyData; // 設置body體
// 進行網路請求
NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
if (!error) {
// 因為回傳的信息也進行了加密所以也需要對返回的數據進行解密
// 將data數據轉化成字元串進行解密
NSString *responseString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSString *resault = [Base getHttpString:responseString];
// 將解密後的字元串轉成data
NSData *resaultData = [resault dataUsingEncoding:NSUTF8StringEncoding];
// 使用json解析
NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:resaultData options:NSJSONReadingMutableLeaves error:nil];
} else {
NSLog(@"%@", error);
}
}];
// 網路請求開始
[dataTask resume];
請求方面基本是這樣的,至於加密的方式是公司內部協商確定的
二 使用AFN
AFHTTPSessionManager *sessionManager = [AFHTTPSessionManager manager];
sessionManager.requestSerializer = [AFJSONRequestSerializer serializer];
sessionManager.responseSerializer = [AFJSONResponseSerializer serializer];
[sessionManager POST:urlString parameters:parameter progress:^(NSProgress * _Nonnull uploadProgress) {
} success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
NSLog(@"response === %@", responseObject);
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
NSLog(@"data ====---0=-=0=0-=0=0-=0= %@", error);
}];
一般公司會根據實際情況對afn進行二次封裝,而不會直接調用afn的介面,比如說加密等